资讯 Vite 8 的"统一战争":Rolldown 终结 esbuild + Rollup 双轨制

2026-08-29 21:10:57 views 5

Vite 8 最让我关注的不是 Vue 3.6,也不是 Vue 4.0 启动,而是打包器架构的一次“统一战争”:开发时的 esbuild 和生产时的 Rollup,被一个基于 Rust 的打包器 Rolldown 终结了。Vue&ViteConf 2026 上的这个宣布,本质上是在回答一个工程问题——为什么我们需要两套打包器?

双轨制是历史包袱,不是设计

Vite 以前用 esbuild 做开发依赖预打包和 TS/JSX 转换,用 Rollup 做生产构建。理由听起来合理:esbuild 够快但不具备 Rollup 的插件生态和高级输出能力;Rollup 功能全但不够快。于是 Vite 内部同时维护两条管道。

代价是双向的:

  • 行为不一致:开发时走 esbuild 的依赖处理和转换,生产时走 Rollup 的 tree-shaking 和代码分割。有些项目 dev 正常、build 挂掉,查到最后往往是两个打包器的 module/exports 处理差异。
  • 维护成本翻倍:Vite 团队的每一次优化,都要在两条路径上重复实现。monorepo 里缓存策略也要考虑两套产物,缓存命中率被割裂。

双轨制撑过了 Vite 的早期成长,但到了 8.0,该还了。

Rolldown 用 Rust 重写了 Rollup 的“接口”

Rolldown 不是另一个新打包器,它是“接口兼容 Rollup,底层换成 Rust”的打包器。这意味着 Rollup 的插件模型(resolveIdloadtransformgenerateBundle)被保留,但核心算法——依赖分析、tree-shaking、chunk 生成——全部在 Rust 里并行执行。

可验证的性能数据:

  • 官方口径:比 Rollup 快 10–30 倍
  • monorepo 场景下,冷启动构建速度是 esbuild 的 2.3 倍(注意这是 Rolldown 早期数据,正式发布的 Vite 8 应该只高不低)。
  • 最终产物体积平均缩减 27%

27% 体积缩减不是单纯靠更快的算法换来的,而是 Rust 重写时能对 AST 做更细粒度的 DCE(死代码删除),同时 chunk 合并策略也重新实现过。这不是“快版 Rollup”,而是“能执行 Rollup 插件的优化器”。

兼容性:完整插件兼容,但别掉以轻心

Vite 8 官方承诺“完整插件兼容性”,指的是 Rollup 插件 API 层面。也就是说,你的 vite-plugin-*rollup-plugin-* 大部分可以直接迁移,不需要改源码。Rolldown 实现了 Rollup 的绝大多数钩子,包括异步钩子和 hook 返回数组的 transform

但“完整”是生态覆盖口径,不是数学证明。以下几个场景值得你亲自测试:

  • 使用 this.parsethis.meta 这类依赖 Rollup 内部实现细节的插件。
  • 自定义 resolveId 里读 package.json 且依赖 Node 路径解析习惯的插件。
  • 直接依赖“Rollup 产物顺序”的插件,例如某些 CSS 导入顺序。

另外,npm 上 Rolldown 的具体包名细节原文未提供,建议升级时直接看 Vite 8 迁移文档中的 dependency 声明,以官方发布说明为准。

为什么“统一”比“更快”更重要

抛开数据,单引擎的工程收益是长期的:

  1. 消除 dev/prod 差异:开发和生产共用同一个打包器,意味着 bug 修一次,不会出现“开发环境正常,打包后异常”的玄学问题。
  2. 缓存可以跨模式复用:dev 预构建和 build 产物共享同一份 Rust 优化后的模块图,缓存效率提升。
  3. 依赖变少:Vite 不再需要同时兼容 esbuild 和 Rollup 两个内部管线,架构复杂度显著下降。

这本质上是把“外围整合”替换成“内核统一”。Rolldown 不需要比 esbuild 快很多——只要它够快,同时又能复用 Rollup 生态,统一就是必然。

Rust 重写工具链不是一个孤立事件

Vite 8 的这个决策,和 TypeScript 7.0 用 Go 重写、Astro 7 用 Rust 重写编译器,是同一波浪潮的三个注脚。JavaScript 工具链正在从“JS 写 JS”过渡到“基础设施语言写 JS”。

尤雨溪提到的 Vite+ 是把这件事推到终点:编译器、打包器、服务器、部署工具链全部 Rust 原生实现,目标是前端从创建项目到部署全程毫秒级响应。Rolldown 是这条路线上的第一步,不是最后一步。

三个优化叠在一起才完整

Vite 8 + Rolldown 是构建时优化。但它不是孤立存在的:

  • Vapor Mode 是编译时优化,减少运行时开销。
  • alien-signals 是运行时优化,让响应式系统更轻。
  • Rolldown 是构建时优化,让产物体积和构建速度同时改善。

三者合流,才形成 Vue 3.6 + Vite 8 的完整性能故事。如果只升级 Vite 8 而不启用 Vapor Mode,27% 的体积缩减可能已经足够诱人;但真正理想的效果,需要编译时和运行时优化一起打开。

工程师视角的建议

升级到 Vite 8 后,不要只看 benchmark。拿一个真实中型 monorepo 项目做三件事:

  1. 对比冷启动时间:Vite 7 vs Vite 8,重点看依赖扫描和预打包阶段。
  2. 对比产物大小:记录每个 chunk 的 gzip 值。
  3. 跑一遍自定义 Rollup 插件的单测:如果钩子返回了非标准结构,大概率要调。

Rolldown 的 10–30 倍不是神话,但它最性感的地方其实不是更快,而是让 Vite 终于只有一个内核。

复制全文 生成海报 Vite 前端工程化 构建工具

推荐文章

程序员茄子在线接单