Lovable应用程序限制:为什么项目在15个组件后中断
Lovable 实际是什么(以及不是什么)
Lovable 是之前叫做 GPT Engineer 的 AI 驱动应用构建工具,它可以根据简单的文本提示创建 React + TypeScript 应用程序。它配备了 Supabase 后端、Tailwind CSS 样式和 shadcn/ui 组件。简单来说,它是一个围绕大型语言模型的工具,可以为你编写代码、帮助部署,并允许你通过"交谈"来做出更改。
那么,好的方面是什么?这里有一个快速列表:
- 快速原型开发:你可以在几分钟内获得一个可工作的 UI。如果你需要落地页、简单的 CRUD 应用或基础仪表板,Lovable 可以快速将它们整合在一起。
- 非开发人员可访问性:对于想要组合功能性原型而无需自己编写代码的产品人员和设计师来说,这相当不错。
- 流畅的 Supabase 集成:特别是对于简单用例,设置身份验证和数据库连接相当直观。
但是等等。Lovable 并不像人类开发人员那样真正构建软件。不是的。它完全是根据你的提示生成代码。它对整个代码库没有持久的记忆,特别是当你的项目超过其上下文窗口阈值时。这个小细节在你的应用程序变大时会变成大问题。

15 个组件之墙:项目为什么会崩溃
我喜欢将这种现象称为 15 个组件之墙。确切的数字并不严格;对于一些人来说,它发生在 12 个组件时,对于其他人可能是 20 个。但有一个一致的模式,即一切都开始崩溃。
那么,为什么是 15 个?这归结为令牌数学。每个 React 组件,尤其是配备了 Tailwind、props、状态管理和一点业务逻辑的组件,包含 80-200 行代码。一旦你有了 15 个组件,你就在看大约 1,500-3,000 行生成的代码。加上你整个提示历史和 Lovable 依赖的内部系统提示,你就在接近语言模型的有效上下文窗口。
以下是结果:
症状 1:样式回归
你在几个提示中精心完善了你的导航栏。然后,Lovable 生成了一个新的页面组件,猜猜怎样?导航栏的内边距移动了,悬停状态消失了,或移动响应行为变得混乱。你没有要求这些混乱。
症状 2:逻辑冲突
你的身份验证防护工作得很好。添加一个新功能,砰的一声,突然未经身份验证的用户畅通无阻。AI 没有故意破坏它;它在生成新代码时只是失去了对逻辑的跟踪。
症状 3:重复和矛盾的代码
突然之间,Lovable 创建了你的代码库已经有的工具函数。或者更糟,它用略微不同的行为编写了一个新版本。现在你有两个 formatDate 函数,不同的组件使用不同的函数——万岁,一片混乱!
症状 4:导入/导出混乱
当你的组件列表增加时,Lovable 喜气洋洋地产出破损的导入路径、循环依赖,或对大约三个提示前重命名的组件的引用。
踢脚的是?每个单独的提示响应看起来都完美——当单独查看时。AI 在拥有的上下文中尽力而为,但它已经没有足够的了。
上下文窗口回归解释
好吧,让我们变得有点技术性。理解这一点实际上会帮助你规避这个问题。
Lovable 使用大型语言模型(我们说的是 Claude 或 GPT-4 级别,可能两者都有),它们的上下文窗口范围在 128K 到 200K 令牌之间。听起来很大,对吧?好吧,当你分解它时就不是这样了。
以下是 Lovable 会话的大致令牌预算:
| 令牌消费者 | 估计令牌 | 百分比 |
|---|---|---|
| 系统提示和说明 | 5,000-15,000 | 5-10% |
| 你的提示历史 | 10,000-50,000 | 10-30% |
| 当前代码库上下文 | 20,000-80,000 | 15-50% |
| 生成的响应 | 2,000-8,000 | 2-5% |
| 安全边际 / 开销 | 10,000-20,000 | 5-15% |
当你的代码库达到一定规模时,Lovable 开始有选择性,决定在上下文中包含什么代码。它使用一种叫做 RAG(检索增强生成)的方法以及一些猜测来选择哪些文件对你当前的提示最重要。剧透:它不总是猜对。
狡猾的问题是这个上下文窗口回归——AI 修改了它拥有不完整信息的文件,用通常是完全错误的假设填空。
我多次看到这种情况发生:
// 你的组件在提示之前的样子
export const UserProfile = ({ user, onUpdate, showAdmin }: UserProfileProps) => {
const [isEditing, setIsEditing] = useState(false);
const { role } = useAuth();
// ... 50 行精心制作的逻辑
return (
// ... JSX 处理管理员视图、编辑模式等
);
};
// Lovable 在你要求"添加一个生物字段"后重新生成的
export const UserProfile = ({ user }: { user: User }) => {
// 丢失:onUpdate prop、showAdmin prop、useAuth hook、isEditing 状态
// 添加:生物字段,但其他一切都被简化/损坏
return (
// ... 简化的 JSX,缺少一半的原始功能
);
};
AI 没有看到完整的组件。它根据不完整的上下文和对"UserProfile"组件应该是什么样子的通用想法拼凑了一个版本。你的特定逻辑?消失了。
最常见的错误和扩展问题
通过 Reddit、Discord 和我自己的实际经验,这里是最常见问题的列表。
1. Supabase 行级安全冲突
当你添加功能时,Lovable 生成的 RLS 策略开始相互踩脚。在有关系的一些表之后,策略变成一个混乱的混乱。在某些情况下,生成新功能导致 Lovable 完全删除现有 RLS 策略。
2. 状态管理崩溃
Lovable 默认将所有内容都设置为本地 React 状态(useState)。太好了……直到它不是。一旦你需要跨组件的共享状态,祝你好运。AI 可能会引入 React Context、prop 钻取,甚至 Zustand——不管它当时想要什么。
3. 路由不一致
一旦你有大约十个页面,路由就会开始相互冲突。受保护的路由失去了它们的防护。动态路由的参数被错误处理。我也看到 Lovable 生成了重复的路由定义。
4. Tailwind 类冲突和特异性战争
这个会让你抓狂。内联生成的 Tailwind 类可能会冲突。类似 className="w-full max-w-md w-[500px]" 的东西会弹出——三个宽度声明为单个元素而战。
5. API 调用重复
Lovable 不是重用现有的 API 实用函数,而是产出新的 fetch 或 supabase.from() 调用,直接在组件中间。在第十五个组件时,相同的数据库查询可能会在整个代码库中的六个隐藏得很不好的地方浮动。
6. TypeScript 类型侵蚀
最初完美的 TypeScript 类型?慢慢侵蚀。随着复杂性,Lovable 默认为 any,抛出重复的类型定义,或悄悄地以一种破坏其他组件的方式缩小类型。
7. 移动响应性回归
这个可能是最烦人的错误。你得到了整洁的响应式设计,进行了桌面更改,砰!移动被破坏了。AI 在重新组合组件时经常会脱落那些全重要的响应式断点类。

真实基准:Lovable 崩溃的地方
我尝试了使用不同工具构建相同的东西——一个具有身份验证、CRUD 操作、团队管理和仪表板的项目管理工具。Lovable、Bolt.new、Cursor 和良好的手工 Next.js 设置。以下是发生的情况:
| 指标 | Lovable | Bolt.new | Cursor + Next.js | 手工 Next.js |
|---|---|---|---|---|
| 工作原型时间 | 25 分钟 | 30 分钟 | 2 小时 | 8 小时 |
| 第一次回归前的组件 | 14 | 11 | N/A* | N/A |
| 20 个组件时需要手动修复的错误 | 12 | 15 | 3 | 0 |
| 项目结束时的代码质量 (1-10) | 3 | 3 | 7 | 9 |
| 可以部署到生产环境吗? | 否 | 否 | 是,需要工作 | 是 |
| 包括错误修复的总时间 | 12 小时 | 14 小时 | 6 小时 | 8 小时 |
* Cursor 不会遇到限制,因为它在你的真实文件系统中工作。
最后一行说明了一切。Lovable 的原型速度无与伦比,但达到生产就绪状态?它吃掉所有节省的时间,甚至更多修复它造成的混乱。
另外,成本。截至 2025 年中期,Lovable 的范围从 $20/月(Starter,消息额度有限)到 $100/月(Teams)。当你正在消耗消息额度来修复问题时,Starter 计划可能会很快用尽。我在中等复杂的应用上花费了 200 多条消息来撤销回归。
实际有帮助的解决方法
鉴于所有这些注意事项,有多种方法可以扩展 Lovable 的有用性范围:
固定你的关键组件
向 Lovable 明确说明哪些文件不应被改动:
DO NOT modify the following files:
- src/components/Navigation.tsx
- src/components/AuthGuard.tsx
- src/lib/supabase.ts
- src/types/index.ts
Only create or modify files related to the new Settings page.
这不是万无一失的,但它有助于缓解回归。
使用原子提示
坚持每个提示一个单一的更改。与其说"添加带有用户偏好、通知控制和主题切换器的设置页面",不如将其分解为三个单独的请求。更小的更改等于上下文溢出的机会更少。
外部导出和编辑
让 Lovable 与 GitHub 同步并以此为优势。在添加主要功能后:
- 推送到 GitHub
- 在本地拉取并审查
- 手动修复任何问题
- 推送修复
- 与 Lovable 同步
这种 AI 生成与人类触手的混合是我找到的最好的配方。
建立类型优先的方法
早期构建一个 types.ts 文件,并明确参考它:
Using the types defined in src/types/index.ts (User, Project, Task, Team), create a TaskList component that...
这给了 Lovable 一个坚实的锚点,显著减少类型侵蚀。
战略性地开始新对话
新对话,新上下文。有时用简洁的代码库描述重置聊天线程会像魔法一样工作,比长期进行的线程产生更清洁的结果。
何时从 Lovable 迁移出去
以下是何时将工具交换为适当开发的时间:
- 你花费更多时间修复而不是构建。 当这种情况开始发生时,好吧,是时候重新考虑了。
- 出现复杂业务逻辑。 多步工作流、复杂的授权、实时功能、支付——这些需要人类的创意。
- 性能至关重要。 Lovable 为你启动,但对于高级优化,你需要具有正确工具的专家。
- 处理真实数据。 不要冒险用 AI 生成的代码处理敏感的真实用户数据——尤其是围绕身份验证、支付或个人身份信息。
- 你需要可靠的 CI/CD 和测试。 Lovable 不为你编写测试。谁想要将未经测试的代码发送到生产环境?
迁移相当直接:导出到 GitHub,建立一个真正的 Next.js 或 Astro 项目,重构,添加测试,并设置强大的部署流程。
有一个经过验证的 Lovable 原型?祝贺。现在,真正构建它。这是我们参与的地方,通过我们的 headless CMS development 和 custom development services 提供过渡协助。
值得考虑的替代方案
对 Lovable 感到厌倦?这是你可能尝试的:
Cursor + Next.js/Astro:对于想要 AI 协助但没有扩展头疼的开发人员的黄金选择。Cursor 在真正的 IDE 中工作,触及你控制的实际文件。AI 帮助而不拥有你的代码库。
Bolt.new:对 Lovable 有类似的抱负,以及相同的限制。在特定的 UI 模式中有一些独特的优势,但会像其表亲 Lovable 一样在上下文上停滞。
v0 by Vercel:完美用于生成你网格到你自己项目中的单个 UI 组件。它的野心不如 Lovable(它不试图构建整个应用),那个更狭窄的镜头使它更可靠。
Windsurf (Codeium):另一个 AI 倾向的 IDE,但对更大代码库有天赋。与 Lovable 不同,它不会尝试将整个项目塞进聊天中,因为它利用你的本地文件。
实际开发:是的,有时你需要一个有强大框架的熟练开发人员。当你旨在扩展、处理真实用户或梦想超越原型时,没有什么比得上顶级人才和好框架。有兴趣?与我们联系——我们已经引导许多团队从 AI 原型转向可靠的架构。
FAQ
为什么我的 Lovable 应用在添加更多组件后会崩溃?
Lovable 的 AI 模型有有限的上下文窗口。随着你的项目扩展,AI 对整个代码库的掌握力下降。它开始在生成代码时假设事情,导致回归、样式不匹配和逻辑崩溃。这通常在你达到 12 到 20 个组件时引发,取决于复杂性。
Lovable 中的上下文窗口回归是什么?
曾经感觉你的代码在没有请求的情况下神奇地改变?那是上下文窗口回归。AI 在没有完整图景的情况下进行修改或重新生成代码,导致来自其训练数据的不正确假设,而不是你的实时实现。它破坏功能、反转样式和擦除逻辑——所有未经提示。
我可以用 Lovable 构建一个生产应用吗?
也许,如果你纯粹坚持简单应用(如落地页、基本 CRUD 工具、内部仪表板,人数有限)。但是,对于涉及复杂逻辑、合法安全、快速性能,或稍微重要的用户库的任何事情,不。这是一个原型天堂,而不是生产电站。非常能说的是,它创建零测试、优化零性能,它的安全模式?让我们说它们是进行中的工作。
Lovable 在崩溃前可以处理多少个组件?
大多数人在 12 到 20 个组件之间遇到问题。组件复杂性、提示历史长度以及嵌入了多少状态/逻辑等因素影响这个阈值。更简单的、显示密集的组件为你提供更多空间,比复杂的有状态组件。
对于构建应用,Lovable 比 Bolt.new 更好吗?
它们是镜像图像,共享优势和劣势。Lovable 在 Supabase 集成中占优势,但 Bolt.new 在部署中略更通用。两者都面临相同的增长限制。对于超出简单模型的生产应用,都不适用。截至 2025 年,两者都以 $20/月开始,Lovable 的计划攀升至 $100/月。
如何在不重新开始的情况下修复 Lovable 回归?
最好的解决方案是通过 GitHub 导出,在本地 IDE(VS Code 或 Cursor)中审计,手动修复,然后同步回来。其他技巧包括原子提示(每个请求一个更改)、声明要保留的文件,以及当聊天膨胀时以新的对话重新开始。
对于我的项目,我应该使用 Lovable 还是 Cursor?
快速原型和想法验证?Lovable 获胜。对于真实用户部署,Cursor 与 Next.js 或 Astro 等坚实框架相结合,提供 AI 推动而不受限制。Cursor 查看你的整个项目,没有上下文问题,因为它在你的现有文件上操作。
将 Lovable 项目迁移到真正开发的最佳方式是什么?
通过 GitHub 集成导出,建立一个坚实的 Next.js 或 Astro 项目,配备你最喜欢的工具,并将 Lovable 脚本视为蓝图——重建、精化、插入真正的类型、测试、错误处理,并在进行中提升性能。这条路线比直接重构自动生成的混乱要快。