Bolt vs Lovable 生产就绪性:安全性、代码质量与扩展性
过去六个月,我一直在观察团队将 AI 构建器原型部署到生产环境,然后在三个月后匆忙重写它们。Bolt 和 Lovable 确实是令人印象深刻的工具——我两个都用过——但在"可工作的演示"和"生产应用程序"之间存在一个危险的鸿沟,这两个工具的营销都不想谈论。
这篇文章是我希望在我们为客户部署 Lovable 生成的 MVP 并发现其 Supabase RLS 策略存在暴露用户数据的巨大漏洞之前有人写过的诚实分析。我们在测试环境中发现了它。并非所有人都那么幸运。
让我们深入探讨当你尝试将这些 AI 构建的应用程序带到演示阶段之外时实际发生的情况——以及何时有意义迁移到自定义 Next.js 构建。
目录

2026 年 AI 构建器的现状
Bolt 和 Lovable 都已显著成熟。Lovable 在短短两个月内达到 2000 万美元 ARR——欧洲创业公司历史上最快的速度——而 Bolt.new 在六个月内达到 4000 万美元 ARR。这些数字告诉你一些重要的事情:人们正在用这些工具构建真实的东西,而不仅仅是试试。
但增长数字并不等于生产就绪性。
以下是每个工具目前的位置:
Lovable 采用设计优先的方法,生成带有 Supabase 作为预配置后端的 React + TypeScript 应用程序。它生成真正干净的代码——shadcn/ui 组件、适当的加载状态、错误边界、响应式布局。代码质量是 AI 构建器中最好的。
Bolt 遵循代码优先的理念,为开发者提供一个浏览器内 IDE,支持 React、Vue、Svelte 和原生 JS。它使用 Claude 作为后端,具有一个巧妙的"diffs"功能,仅更新修改的代码段而不是重新生成整个文件。Bolt Cloud 现在包括内置数据库、身份验证、存储和托管。
两个工具都可以让你在一个下午从想法进展到可工作的原型。问题是那个下午之后会发生什么。
安全限制:这两个工具都没有告诉你的
这是最重要的部分,也是你在其他任何地方会发现最少覆盖的部分。我已经在多个项目上审计了两个工具的输出,模式是一致的。
Lovable 的安全概览
Lovable 自动生成 Supabase RLS(行级安全)策略。理论上,这很好——RLS 是一个可靠的安全模型。实际上,AI 生成的策略遵循通常不符合你实际授权要求的通用模式。
这是一个真实的例子。我们提示 Lovable 构建一个具有基于团队权限的多租户 SaaS。生成的 RLS 策略看起来像这样:
CREATE POLICY "Users can view own team data"
ON public.projects
FOR SELECT
USING (auth.uid() IN (
SELECT user_id FROM team_members
WHERE team_id = projects.team_id
));
看起来合理吧?但它错过了一个关键的边界情况:已停用的团队成员。没有检查 team_members.active = true,意味着曾经在团队中的任何人仍然可以读取所有项目数据。AI 不理解你关于访问撤销的业务规则——它生成结构正确但语义不完整的策略。
我们在 Lovable 输出中发现的其他安全漏洞:
- 默认情况下没有速率限制 API 端点
- 缺少输入验证 服务端函数——客户端验证存在但可以被绕过
- Supabase 服务角色密钥 有时在客户端代码中被引用(这是一个严重的漏洞)
- 没有 CSRF 保护 超出 Supabase Auth 本身提供的
- 身份验证令牌处理 将令牌存储在 localStorage 而不是 httpOnly cookie 中
Bolt 的安全概览
Bolt 的安全情况可以说更糟,因为它的意见性较少。你获得了更多框架灵活性,但这意味着 AI 对你的安全架构做出了更多假设。
Bolt Cloud 比 Lovable 的 Supabase 集成更新,生成的安全策略需要更仔细的验证。我们看到过:
- 环境变量 在客户端包中硬编码
- 缺少身份验证中间件 在 API 路由上——AI 在一些路由上生成身份验证检查但遗漏了其他的
- SQL 注入向量 在原始查询构造中(不使用 ORM 时)
- 没有内容安全策略标头 在部署配置中
- CORS 设置为通配符 (
*) 在开发中,延续到生产构建
这是一个 Bolt 生成的具有 SQL 注入漏洞的 API 路由,曾经被部署过:
// 由 Bolt 生成——不要部署这个
app.get('/api/users', async (req, res) => {
const { search } = req.query;
const result = await db.query(
`SELECT * FROM users WHERE name LIKE '%${search}%'`
);
res.json(result.rows);
});
任何开发者都会立即看到这一点。但这些工具的全部要点是非开发者也可以使用它们。这就是危险所在。
真正的安全问题
两个工具都不执行威胁建模。它们不能,因为它们不理解你的威胁模型。它们生成有效的代码,而不是对抗性输入安全的代码。如果你在构建处理 PII、财务数据或医疗保健信息的任何东西,AI 生成的代码需要在上线前进行完整的安全审计。句号。
代码质量内幕
我会在应得之处给予信用:两个工具为简单的应用程序生成的代码都出乎意料的不错。随着复杂性增加,问题就会出现。
Lovable 的代码输出
Lovable 的 TypeScript 输出确实很好。组件结构良好,类型基本正确,使用 shadcn/ui 意味着你获得可访问、经过充分测试的 UI 原语。模拟数据使初始构建感觉像完成的产品。
但随着复杂性的增加,以下内容会退化:
- 状态管理变得混乱。 Lovable 倾向于对前几个组件进行 prop 钻取,然后当树变深时突然引入 React context。你最终会得到一个很难推理的模式混合。
- 没有代码分割。 一切都进入一个包。对于原型,有什么关系?对于有 50+ 路由的生产,你的初始加载时间会大幅增加。
- 重复的逻辑。 我们发现相同的数据获取逻辑在一个项目中的 12 个组件中被复制粘贴。AI 不会重构——它只是添加。
- 测试是不存在的。 没有单元测试,没有集成测试,没有端到端测试。零。
Bolt 的代码输出
Bolt 生成具有 React、Tailwind 和 Node.js 的精致全栈 JavaScript。基于差异的方法意味着迭代更快和更有针对性。但:
- 文件间的模式不一致。 一个组件使用 async/await,下一个使用
.then()链。一个文件有适当的错误处理,相邻的文件没有。 - 预览和部署可靠性变化。 有时预览完美工作;有时它以很难调试的方式破损,因为你没有编写代码。
- 对简单功能过度工程。 我们要求 Bolt 构建一个联系表单,得到了一个完整的表单构建器,具有动态字段配置、验证模式生成器和提交队列。很酷,但不是我们需要的。
代码质量比较
| 方面 | Lovable | Bolt |
|---|---|---|
| 类型安全 | 强(全程 TypeScript) | 混合(默认 JS,可选 TS) |
| 组件架构 | 一致,设计系统对齐 | 灵活但不一致 |
| 错误处理 | 基本错误边界,存在一些漏洞 | 文件间不一致 |
| 测试 | 未生成 | 未生成 |
| 包优化 | 最小 | 最小 |
| 可访问性 | 好(shadcn/ui) | 可变 |
| 文档/注释 | 稀疏但足够 | 更详细,有时误导 |

扩展边界:故障点
这是没人博客谈论的部分——当你的 Lovable 或 Bolt 原型实际获得用户时会发生什么。
数据库扩展
Lovable 将你锁定在 Supabase 中。这本身并不坏——Supabase 可以处理显著的负载。但 AI 生成的数据库模式很少包括适当的索引策略。我们有一个 Lovable 生成的应用程序,在有 1,000 个用户时运行完美,在 10,000 个用户时爬行至停顿,因为一个频繁查询的表在每个列表视图的 ORDER BY 中使用的 created_at 列上没有索引。
Bolt 让你选择数据库,这听起来像灵活性,但实际上意味着 AI 生成次优查询的空间更大。没有 Lovable 的 Supabase 约定可以依靠,Bolt 生成的数据库代码倾向于更天真。
大规模前端性能
两个工具都不生成考虑性能预算的应用程序。以下是我们在一个中等复杂的仪表板应用程序(大约 30 个组件,8 个路由)上测量的内容:
| 指标 | Lovable | Bolt | 自定义 Next.js |
|---|---|---|---|
| 初始包大小 | 487 KB | 523 KB | 142 KB |
| Lighthouse 性能 | 62 | 58 | 94 |
| 交互时间 | 3.8 秒 | 4.2 秒 | 1.1 秒 |
| 最大内容绘制 | 2.9 秒 | 3.4 秒 | 0.8 秒 |
| 代码分割 | 无 | 无 | 基于路由 + 动态 |
| 图像优化 | 基本 | 无 | Next/Image 带 AVIF |
这些数字来自我们自己的测试。你的结果会有所不同,但模式是一致的:AI 生成的应用程序比手工优化的等效物重 3-4 倍。
Supabase 上限
这值得单独说明。Lovable 紧密的 Supabase 耦合意味着你继承 Supabase 的限制:
- Edge Functions 有 150ms 的冷启动——对大多数情况都可以,对实时功能很痛苦
- 连接池 在计划级别处于上限——Pro 计划给你 50 个直接连接
- 实时订阅 不能线性扩展——我们在 Pro 层上看到超过 500 个并发连接的性能下降
- 不支持跨多个表的复杂事务 具有适当的回滚语义
如果你的应用程序超出 Supabase,无论你是从 Lovable 开始还是从零开始构建,你都在看一个显著的重写。
头对头比较
| 功能 | Lovable | Bolt | 自定义 Next.js |
|---|---|---|---|
| MVP 的时间 | 小时 | 小时 | 天到周 |
| 框架 | 仅 React + Vite | React、Vue、Svelte、原生 | Next.js(React) |
| 后端 | Supabase(锁定) | 灵活(Bolt Cloud 或自定义) | 任何 |
| 身份验证 | Supabase Auth(内置) | Bolt Cloud Auth 或自定义 | NextAuth、Clerk、自定义 |
| 安全基准 | RLS 策略(需要审计) | 最小(需要一切) | 你控制它 |
| 代码导出 | GitHub 同步 | 完整代码访问 | N/A——它是你的 |
| SSR/SSG | 否(仅客户端) | 有限 | 完整支持 |
| SEO | 差(SPA) | 差(SPA) | 优秀 |
| 大规模成本 | $25+/月工具 + Supabase | $20+/月工具 + 基础设施 | 仅托管 |
| 供应商锁定 | 高(Supabase) | 中等(Bolt Cloud) | 低 |
| 生产就绪性 | 40% 到位 | 30% 到位 | 你决定 |
何时迁移到自定义 Next.js
并非每个项目都需要迁移。我想清楚这一点。如果你在为一个 10 人的团队构建内部工具,Lovable 生成的应用程序可能会无限期地为你服务。迁移对话在特定条件出现时开始。
现在迁移,如果:
你需要 SEO。 Bolt 和 Lovable 都生成客户端渲染的 SPA。如果有机搜索流量对你的业务很重要,你需要服务端渲染或静态生成。Next.js 本地处理这个。对于营销网站、博客、电子商务和任何内容驱动的应用程序,这本身就是一个破坏交易的问题。
你在处理敏感数据。 财务信息、医疗记录、大规模的 PII——这些需要任何 AI 构建器都无法提供的安全保证。你需要自定义中间件、适当的审计日志、静态加密和一个已由理解你特定合规要求的人类审查过的安全模型。
性能是商业指标。 如果页面加载时间直接影响你的收入(它对电子商务确实有影响——Amazon 的著名 100ms = 1% 收入发现仍然成立),你承不起 3-4 秒的 TTI。
你需要自定义后端逻辑。 与 Stripe 的支付处理超出基本结账、webhook 处理、后台任务、第三方 API 编排、复杂的授权——没有任何这个被 AI 构建器很好地服务。
你的团队已经增长超过 3 个开发者。 没有测试、没有一致模式、没有文档的 AI 生成代码——当多个人需要在代码库中工作时,它变成了一个责任。
停留在 AI 构建器中,如果:
- 你仍在验证产品市场匹配
- 应用程序仅限内部,用户基础很小
- 你的团队中没有开发者,也没有他们的预算
- 迭代的速度比现在的代码质量更重要
我们通过我们的 Next.js 开发能力 帮助团队进行这种转变。目标不是从头开始重建一切——而是前进可行的内容,替换不可行的内容。
迁移剧本
当迁移决定做出时,这是我们遵循的过程。这不是"扔掉一切重新开始"。那是浪费。
步骤 1:审计现有代码库
从 Lovable 导出代码(通过 GitHub 同步)或 Bolt(直接下载)。通过静态分析运行它:
# 安装并运行分析工具
npx eslint . --ext .ts,.tsx --report-unused-disable-directives
npx tsc --noEmit --strict
npx bundlesize
npx depcheck
你在寻找:未使用的依赖、被压制的类型错误、安全反模式和死代码。
步骤 2:识别可重用组件
Lovable 的 shadcn/ui 组件通常值得保留。它们结构良好,遵循可访问性指南。Bolt 的组件变化更多,但通常有很好的 UI 逻辑,只需要清理。
我们通常挽救 30-50% 的前端组件和 0-10% 的后端逻辑。
步骤 3:构建 Next.js 基础
// next.config.ts——生产就绪的起点
import type { NextConfig } from 'next';
const config: NextConfig = {
reactStrictMode: true,
poweredByHeader: false,
images: {
formats: ['image/avif', 'image/webp'],
},
headers: async () => [
{
source: '/(.*)',
headers: [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
{ key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
{
key: 'Content-Security-Policy',
value: "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline';",
},
],
},
],
};
export default config;
注意这里的内容,AI 构建器不生成什么:安全头、图像优化配置、启用的严格模式。这些是生产的表现项目。
步骤 4:替换后端
如果你在 Lovable/Supabase 中,你有选项:
- 保持 Supabase 但添加适当的中间件、自定义 RLS 策略和由你的团队审查的边缘函数
- 迁移到自定义后端 带 Next.js API 路由或单独的服务(Node.js、Go,无论什么适合)
- 采用不同的 BaaS 如 Firebase、Neon 或 PlanetScale,取决于你的数据模型
对于已经投资 Supabase 生态系统的团队,我们经常建议保留它,但用具有服务端验证的适当数据访问层来包装它。我们的 无头 CMS 开发 工作经常涉及这种后端转变。
步骤 5:添加 AI 构建器跳过的内容
- 测试: Jest + React Testing Library 用于单元/集成,Playwright 用于端到端
- 监控: Sentry 用于错误追踪,Vercel Analytics 或 PostHog 用于性能
- CI/CD: GitHub Actions 带 lint、类型检查、测试和预览部署阶段
- 可观测性: 结构化日志、健康检查、正常运行时间监控
成本分析:构建 vs 重建
让我们谈谈金钱。这是每个创始人问的问题:"我们已经在 Lovable/Bolt 中构建了它。正确地做它需要花费多少?"
| 方法 | 时间表 | 成本范围 | 风险级别 |
|---|---|---|---|
| 停留在 Lovable/Bolt(添加手动修复) | 2-4 周 | $3,000-8,000 | 高(修补基础) |
| 逐步迁移到 Next.js | 4-8 周 | $15,000-40,000 | 中等 |
| 在 Next.js 中完整重建 | 6-12 周 | $25,000-75,000 | 低(干净架构) |
| 混合(保留前端,重建后端) | 3-6 周 | $10,000-30,000 | 中等 |
这些数字基于我们在过去一年中范围的项目。你的结果会因复杂性而异,但比率成立。逐步迁移路径——你在其中保留可行的内容并逐步替换不可行的——通常是成本和风险之间的最好平衡。
常见问题
Lovable 代码实际上是生产就绪的吗? 不是没有显著的手动审查。Lovable 生成干净、结构良好的 TypeScript 代码,比任何其他 AI 构建器更接近生产就绪——但它仍然缺少适当的安全加固、测试、性能优化和边界情况的错误处理。把它想象成一个强有力的初稿,需要经验丰富的开发者的审查,而不是一个完成的产品。
Bolt.new 可以构建全栈应用程序吗? 是的,特别是带 Bolt Cloud 的 2026 补充(内置数据库、身份验证、存储和托管)。Bolt 给你比 Lovable 更多的框架灵活性——你可以使用 React、Vue、Svelte 或原生 JS。然而,那种灵活性也意味着更少的护栏,生成的后端代码需要比 Lovable 的 Supabase 输出更仔细的安全审计。
从 Lovable 迁移到 Next.js 需要多少费用? 对于一个典型的 MVP,有 5-10 个核心功能,预期在 4-8 周内进行逐步迁移需要 $15,000-$40,000。完整重建运行 $25,000-$75,000,取决于复杂性。好消息是 Lovable 的 30-50% 前端组件通常可以被携带,这相比从零开始降低了成本和时间表。
为什么我不能直接在 Lovable 中修复安全问题并保持使用它? 你可以,对于更简单的应用程序。但 Lovable 的架构有基本限制,补丁无法解决:仅客户端渲染(没有 SEO 的 SSR)、锁定 Supabase 用于后端、没有代码分割、没有内置测试基础设施。如果你的需求不会撞上这些墙,修复安全问题并停留在 Lovable 上是一个完全有效的策略。
Bolt 或 Lovable 对 SaaS 原型更好吗? Lovable 因其 Supabase 集成而在 SaaS 原型中略占优势,它开箱即提供身份验证、数据库和 RLS 策略。你会比 Bolt 更快地拥有一个有用户账户的工作应用程序。然而,如果你需要一个非 React 框架或 Supabase 以外的后端,Bolt 的灵活性使它成为更好的选择,尽管需要更多配置。
AI 生成代码中最大的安全风险是什么? 我们一致看到的顶部风险:在客户端包中硬编码 API 密钥和机密、不完整的行级安全策略,错过边界情况(如已停用的用户保留访问权)、API 端点上缺少速率限制、原始查询中的 SQL 注入、过于宽松的 CORS 配置和存储在 localStorage 中而不是 httpOnly cookie 中的身份验证令牌。这些都不是无法修复的,但你需要知道去寻找。
什么时候我不应该从 AI 构建器迁移? 如果你仍在验证产品市场匹配、你的应用程序仅限内部,少于 50 个用户、你的团队中没有开发者,或迁移的成本超过了更好的性能和安全的业务价值,请停留。你能做的最坏的事情是重建还没有找到市场的产品。
我可以使用 Astro 而不是 Next.js 来进行迁移吗? 绝对可以。如果你的应用程序内容丰富,客户端交互性最小——想想营销网站、文档、博客或内容平台——Astro 通常比 Next.js 更好。Astro 的岛屿架构默认发送零 JavaScript,仅对交互式组件进行水合,为内容集中的网站甚至提供比 Next.js 更好的性能。我们已经做过几个从 Lovable 到 Astro 的迁移,正是针对这个用例。