Hotdry.
web

AI 一周重建 Next.js:Cloudflare vinext 的工程实践与架构设计

深度解析 Cloudflare 工程师如何借助 AI 在一周内完成 Next.js 重建,涵盖技术架构、AI 工作流、工程护栏与性能基准数据。

2026 年 2 月,Cloudflare 仅用一周时间让一名工程师配合 AI 模型从零重建了 Next.js 框架。这并非简单的封装或适配,而是一个完全基于 Vite 的 Next.js 替代实现。项目命名为 vinext(发音 "vee-next"),已投入生产环境,首批客户包括美国政府 CIO.gov 网站。这篇文章将深入解析其技术路径与工程细节,为 AI 辅助开发提供可落地的参考。

背景:Next.js 的部署困境

Next.js 是目前最流行的 React 框架,拥有数百万开发者。然而,当将其部署到 Cloudflare Workers、Netlify 或 AWS Lambda 等 Serverless 平台时,Next.js 的工具链暴露出严重的兼容性问题。Next.js 投入大量资源开发 Turbopack,但这些定制化输出无法直接在其他平台上运行。OpenNext 试图解决这一适配问题,但本质上是对 Next.js 构建产物的逆向工程,导致版本迭代时面临大量不可预测的变更,维护成本极高。

另一个核心痛点在于开发阶段。next dev 只能在 Node.js 环境中运行,开发者无法在本地测试平台特定的 API(如 Durable Objects、KV 或 AI bindings)。这意味着即使生产环境最终部署到 Cloudflare Workers,开发阶段也必须借助 workaround 才能使用这些能力。

vinext 的技术架构

vinext 的核心思路非常清晰:不完全适配 Next.js 的构建产物,而是直接在 Vite 之上重新实现 Next.js 的 API 表面。这不是一个包装器,而是一个真正的替代实现,涵盖路由、服务端渲染、React Server Components、Server Actions、缓存和中间件等全部核心功能。

npm install vinext

迁移现有项目时,只需将脚本中的 next 替换为 vinext

vinext dev          # 启动支持 HMR 的开发服务器
vinext build        # 生产构建
vinext build         # 构建并部署到 Cloudflare Workers

vinext 约 95% 的代码是纯 Vite 实现,与 Cloudflare 平台无关。路由、模块垫片、服务端渲染管道、RSC 集成均采用跨平台设计。这意味着未来可以轻松扩展到 Vercel、Netlify 等其他托管平台 ——Cloudflare 透露他们在 30 分钟内就完成了 Vercel 部署目标的概念验证。

AI 工作流:如何一周完成框架重建

前期规划

项目启动前,工程师在 OpenCode 中与 Claude 花了数小时反复讨论架构设计,包括构建顺序和抽象层选择。这份规划成为后续开发的北极星指标。

迭代开发流程

具体的开发流程遵循以下循环:先定义任务(例如 “实现 next/navigation 垫片,包含 usePathname、useSearchParams、useRouter”),然后让 AI 编写实现和测试,运行测试套件,若通过则合并,若失败则将错误输出反馈给 AI 进行迭代修复。这个过程重复了 800 多次,总成本约 1100 美元的 Claude API 令牌。

代码审查自动化

每个 PR 都有 AI Agent 进行代码审查,审查意见由另一个 Agent 处理。反馈循环大部分实现了自动化,但工程师坦承并非每次都完美 —— 有些 PR 实现看起来正确但与实际 Next.js 行为不符,需要人工干预修正方向。

浏览器级验证

除了单元测试,工程师还使用 agent-browser 验证实际渲染输出、客户端导航和 hydration 行为。许多细微的浏览器问题无法被单元测试捕获,这一层验证至关重要。

工程护栏:AI 代码的质量保障

vinext 几乎每一行代码都由 AI 编写,但通过严格的工程护栏确保质量。项目包含超过 1700 个 Vitest 单元测试、380 个 Playwright 端到端测试(部分直接移植自 Next.js 测试套件和 OpenNext 的 Cloudflare 一致性测试),完整的 TypeScript 类型检查(通过 tsgo),以及通过 oxlint 进行的代码 linting。CI 流程在每个 PR 上运行全部测试。

当前 vinext 已覆盖 Next.js 16 API 表面的 94%。README 诚实列出了不支持的功能和已知限制,包括静态预渲染(build-time pre-rendering)尚未实现,但 ISR(增量静态再生成)已正常工作。

性能基准数据

vinext 与 Next.js 16 在相同的 33 路由 App Router 应用上进行了基准对比。生产构建时间方面,Next.js 16.1.6(Turbopack)平均耗时 7.38 秒作为基准;使用 Vite 7 / Rollup 的 vinext 耗时 4.64 秒,提升 1.6 倍;而使用 Vite 8 / Rolldown(Rust 版打包器)的 vinext 仅耗时 1.67 秒,提升 4.4 倍。客户端打包体积方面,Next.js 16.1.6 的 gzipped 大小为 168.9 KB,vinext(Rollup)为 74.0 KB(减少 56%),vinext(Rolldown)为 72.9 KB(减少 57%)。

这些数据来自单一 33 路由应用,测量的是编译和打包速度,而非生产环境的服务性能。Cloudflare 在 GitHub CI 上对每次合并都运行基准测试。

流量感知预渲染:创新设计

vinext 还引入了一个实验性功能:Traffic-aware Pre-Rendering(TPR)。传统的 Next.js 在构建时预渲染 generateStaticParams() 列出的所有页面,一个拥有 10000 个产品页面的站点意味着构建时需要渲染 10000 次,即使其中 99% 的页面从未被访问过。TPR 的思路是在部署时查询 Cloudflare 区域分析数据,仅预渲染实际产生流量的页面。

vinext deploy --experimental-tpr

  Building...
  Build complete (4.2s)

  TPR (experimental): Analyzing traffic for my-store.com (last 24h)
  TPR: 12,847 unique paths — 184 pages cover 90% of traffic
  TPR: Pre-rendering 184 pages...
  TPR: Pre-rendered 184 pages in 8.3s → KV cache

  Deploying to Cloudflare Workers...

对于符合幂律分布的流量模式,90% 的请求通常集中在 50 到 200 个页面,这些页面在数秒内完成预渲染,其余页面回退到按需 SSR 并通过 ISR 缓存。

成功要素分析

vinext 项目得以成功,四个条件缺一不可:Next.js 有完善的文档和 API 规范,训练数据中大量存在;Next.js 拥有详尽的测试套件,数千个 E2E 测试提供了可机械验证的规范;Vite 本身是优秀的构建基础,提供了 HMR、ESM、插件 API 和生产打包能力,无需从零构建打包器;模型能力已经成熟,能够在一个代码库规模下保持上下文连贯性并进行跨模块推理。

对软件工程的启示

这一项目揭示了一个重要趋势:软件中的大多数抽象层是为了帮助人类而存在的,因为人脑无法一次性掌握整个系统。AI 没有这个限制 —— 它可以在上下文中保持整个架构,并直接编写代码。哪些抽象是真正基础的,哪些只是人类认知的拐杖,这个界限未来几年会持续变化。vinext 就是一个数据点:给定 API 合约、构建工具和 AI 模型,AI 可以写出中间全部代码,无需中间框架。这种模式将在更多软件领域重复出现。


参考资料

查看归档