Vite 8 迁移:Rolldown 与 Oxc 接管 esbuild / Rollup 后要改什么
迁移指南:
Rolldown 集成说明:
Vite 8 用 Rolldown 和基于 Oxc 的工具替换了 esbuild 与 Rollup。rolldown-vite 这个包实现了「Vite 7 + Rolldown」,不包含 Vite 8 的其它变更,可以把它当作迁移到 Vite 8 的中间步骤。
浏览器目标对齐 Baseline Widely Available
Vite 8 的浏览器目标对齐 2026-01-01 时点的 Baseline Widely Available 特性集,也就是大约两年半前发布的特性范围。
依赖预打包改用 Rolldown
依赖优化(dependency optimization)由 Rolldown 承担,不再用 esbuild。
为兼容旧配置,Vite 仍然支持 optimizeDeps.esbuildOptions,会自动把它转换成 optimizeDeps.rolldownOptions。但 optimizeDeps.esbuildOptions 已标记弃用,未来版本会移除。新配置直接写 optimizeDeps.rolldownOptions。
JavaScript 转换改用 Oxc
JavaScript 转换由 Oxc 完成,替换掉原来的 esbuild。
同样出于兼容,Vite 仍然支持 esbuild 选项,会自动转换成 oxc。esbuild 选项已弃用,后续会移除。
esbuild 变成可选依赖
Vite 不再直接使用 esbuild,它现在是可选依赖(optional dependency)。有两个直接影响:
- 如果使用的插件内部调用了
transformWithEsbuild,需要自己把 esbuild 装成devDependency。 transformWithEsbuild已弃用,应迁移到transformWithOxc。
JS 压缩默认用 Oxc minifier
JavaScript 压缩默认改为 Oxc minifier,替代 esbuild。需要回退时可以用已弃用的 build.minify: 'esbuild' 切回 esbuild,但这个选项未来会被移除,并且需要自行把 esbuild 安装为 devDependency。
Rolldown 集成带来的整体变化
- 构建用 Rolldown(此前是 Rollup)
- 依赖优化器用 Rolldown(此前是 esbuild)
- CommonJS 支持由 Rolldown 处理(此前是
@rollup/plugin-commonjs) - 语法降级(syntax lowering)用 Oxc(此前是 esbuild)
- CSS 压缩默认用 Lightning CSS(此前是 esbuild)
- JS 压缩默认用 Oxc minifier(此前是 esbuild)
- 配置文件打包用 Rolldown(此前是 esbuild)
另外,从 Vite 7.0.0 起,this.meta 在所有 hook 中可用。
从 rolldown-vite 迁移到 Vite 8
撤销 package.json 里的依赖替换,升级到 Vite 8:
{
"devDependencies": {
"vite": "npm:rolldown-vite@7.2.2" // before
"vite": "^8.0.0" // after
}
}
迁移清单
- 检查
optimizeDeps.esbuildOptions,改写成optimizeDeps.rolldownOptions。 - 检查
esbuild选项,改写成oxc。 - 搜索插件或业务代码里的
transformWithEsbuild调用,迁移到transformWithOxc;无法迁移的,把 esbuild 加进devDependency。 - 如果显式设置了压缩器,确认默认走 Oxc minifier;需要回退才用
build.minify: 'esbuild',并安装 esbuild。 - 确认 CSS 压缩默认使用 Lightning CSS 后,构建产物与体积符合预期。
- 检查是否还有对
@rollup/plugin-commonjs的显式依赖或配置,CommonJS 现在由 Rolldown 处理。 - 核对浏览器目标:对齐 2026-01-01 的 Baseline Widely Available,确认产物语法与目标环境一致。
- 从
rolldown-vite升级的项目,移除npm:rolldown-vite@x.y.z的别名写法,改为vite: ^8.0.0。
风险与注意点
optimizeDeps.esbuildOptions、esbuild选项、transformWithEsbuild、build.minify: 'esbuild'都属于兼容层,未来版本会被移除,仅靠自动转换不是长期方案。- esbuild 不再是 Vite 的直接依赖,任何仍然依赖它的插件都需要在项目里显式安装。
rolldown-vite只覆盖 Vite 7 + Rolldown,不等于 Vite 8;以它作为中间步骤后,仍需完成上述 Vite 8 的配置迁移。- 浏览器目标上调会改变降级与 polyfill 的边界,构建产物需要重新验证。