Vite 8 用 Rolldown 替掉 esbuild + Rollup:改名清单、Node 要求与两步迁移
Vite 8.0 于 2026-03-12 稳定发布。这次不是加插件或调默认值,而是把打包引擎整个换掉:Rolldown(Rust 实现)成为唯一引擎,此前 esbuild 管开发、Rollup 管生产的双打包器方案退出舞台。
- 发布博客:
- 迁移指南:
- rolldown-vite 仓库:
双打包器换成单引擎
Vite 此前在开发态用 esbuild 做预构建与转译,生产构建交给 Rollup,两套引擎各自维护一条链路。Vite 8 把这两条链路合并到 Rolldown 上。官方给出的构建速度对比是相对 Rollup 快 10-30x,性能与 esbuild 对齐。
插件层面,Rolldown 兼容 Rollup / Vite 插件 API,多数现有插件开箱可用。CommonJS 支持也由 Rolldown 接管,不再依赖 @rollup/plugin-commonjs。
Vite 8 还内置了向后兼容层,会把 esbuild / rollupOptions 配置自动转换成 Rolldown / Oxc 的等价物,所以多数项目不改配置也能跑起来。
被替换的组件
| 原组件 | Vite 8 中的替代 |
|---|---|
| 依赖优化器(esbuild) | Rolldown |
| JS 转译 / 降级(esbuild) | Oxc |
| JS 最小化 | Oxc minifier(默认) |
| CSS 最小化 | Lightning CSS(默认) |
| config 打包 | Rolldown |
| CommonJS 处理(@rollup/plugin-commonjs) | Rolldown |
esbuild 不再由 Vite 直接使用,降级为可选依赖。如果有插件内部调用了 transformWithEsbuild,需要自己把 esbuild 装成 devDependency。
弃用与改名
兼容层能兜住大部分场景,但配置键本身在往新名字迁移:
optimizeDeps.esbuildOptions→optimizeDeps.rolldownOptionsesbuild选项 →oxctransformWithEsbuild→transformWithOxcbuild.minify: 'esbuild'未来会移除
前三条是纯改名,第四条意味着 'esbuild' 这个取值不再有对应的实现路径,用了它的项目要换成默认值或其它选项。
Node 与 ESM 要求
Node 要求与 Vite 7 一致:20.19+ 或 22.12+。这两个版本支持无 flag 的 require(esm)。Vite 8 本身仅以 ESM 形式发布,CommonJS 侧只能靠 require(esm) 这条路径接入。
安装体积
安装体积比 Vite 7 大约 +15MB。原因是 Rust 侧二进制随包分发,换来了上面那张表里的引擎替换。
迁移:先 rolldown-vite,再 Vite 8
大项目建议分两步走。第一步先切到 rolldown-vite——它是跑在 Vite 7 上的技术预览版,通过 package.json 里的 vite 别名接入,用来把「Rolldown 自身带来的问题」和「Vite 8 其它改动带来的问题」隔离开。第二步再升到 Vite 8。
{
"devDependencies": {
// 第一步:Vite 7 + Rolldown
"vite": "npm:rolldown-vite@latest"
// 第二步
// "vite": "^8.0.0"
}
}
rolldown-vite 视为实验性,大项目建议固定具体版本号,不要用 @latest 漂移。
单引擎解锁的能力
单引擎之后,开发与生产不再需要两套语义对齐,之前受限于双引擎的能力可以落地:full bundle mode、更灵活的分包策略、模块级持久缓存、Module Federation。
升级前值得知道的背景
Vite 7 已经把最低 Node 提到 20.19,默认浏览器目标改为 baseline-widely-available,并新增了 Vite DevTools。Vite 8 是在这些改动之上做引擎替换的,Node 版本不够的项目需要先过 Vite 7 这道门槛。