Vite 8 迁移:升级是花一个下午,还是丢一整周?三个坑全藏在打包器换血这件事里
Vite 8 的官方口径是「升级基本不用改配置」——这句话对大多数人成立,但对另一部分人是灾难的开始。Linear 从 46 秒降到 6 秒,Beehiiv 快了 64%,Ramp 快了 57%,GitLab 从 2.5 分钟压到 22 秒。这些数字都是真的。但同一份迁移记录里也躺着另一句话:真正卡人的不是项目大小,而是你的依赖树里有没有哪个东西伸手去摸了打包器的内部结构。
先说结论:Vite 8 把 esbuild 和 Rollup 两个打包器收成了一个 Rolldown(Rust 写的,兼容 Rollup 插件 API),同时用 Oxc 接管 JS/TS 转换,Lightning CSS 接管样式压缩。大多数项目 npm install vite@8 就能跑。但有三类项目会翻车,而且翻得很隐蔽——它们能过 CI,然后在生产环境里给你惊喜。
第一种,用了 manualChunks 对象写法的人。这是升级后第一个报的错:
// Vite 7 能跑,Rolldown 直接报错
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['vue', 'vue-router', 'pinia'],
charts: ['chart.js'],
},
},
},
}
Rolldown 只认函数形式,不认对象形式。改法是把依赖判断写成函数:
manualChunks(id) {
if (id.includes('node_modules/vue')) return 'vendor';
if (id.includes('node_modules/chart.js')) return 'charts';
}
跑分包的站点几乎都写过对象式 manualChunks,这是最常见的第一个坑。
第二种,更贵的坑:插件碰了 Rollup 或 esbuild 的内部 API。Vite 8 的兼容层会自动把 build.rollupOptions 转成 build.rolldownOptions、把 esbuild 配置转成 oxc 配置,还会打 deprecation 警告。这些重命名是机械的,兼容层帮你做了。但如果某个插件不看文档、直接 pattern-match esbuild 的内部 AST 形状,兼容层救不了它——它需要插件作者显式支持 Rolldown,而这件事不是每个插件都做完了。这类问题可能让你丢一整周,而且判断方法很简单:你的依赖树里有没有东西越过了文档化的插件钩子,去戳了打包器内部。
第三种,安静的坑:chunk hash 会变。结构一变,缓存键就变,你的长效缓存那一层得重新校准。
还有两个要提前知道的副作用。一是内存:Vite 8 主进程在 dev 模式下比 Vite 7 多吃大约 7 倍物理内存,因为 Rolldown 把更多模块图数据留在内存里。CI 有内存上限的团队要盯着这个数。二是生态兼容:Yarn PnP 目前不兼容,CJS 互操作也有变化。另外 Vite 8 的包是 ESM-only,装包体积多了大约 15MB,因为要把 Rolldown 和 Lightning CSS 的原生二进制一起拉下来,Node.js 要求 20.19+ 或 22.12+。
至于性能收益为什么差距那么大(87% 到 38%),算术很简单:Rolldown 不会让你的 JS 插件变快,插件还是跑在 JS 里,而且是顺序跑。如果你的构建时间大头是 tsc --noEmit 类型检查、图片处理,或者一个在 JS 层干重活的巨型插件,那打包只占你流水线的一小块——官方基准里那个「19000 模块 40.10 秒变 1.61 秒」的 25 倍提升,根本传导不到你的总时长上。先量一下 time vite build 占你 CI 墙钟时间的比例,那就是你的收益天花板。如果打包只占 20%,80% 的提升只换来整体 16%。
落地的安全路径是两步走,别一步跳到底。第一步,在 Vite 7 的 API 上换成 rolldown-vite,用 package.json 的 override 把 vite 指向它,重装后跑一遍构建——这一步只是隔离出「Rolldown 本身兼不兼容」,如果炸了,你能立刻知道是 Rulldown 的锅而不是 Vite 8 其他改动。第二步,去掉 override,正式装 Vite 8,处理 manualChunks 和插件这两个问题。上线前务必 diff 一下构建产物大小和 chunk 结构,别只看构建时间。
可落地的下一步:先在本地跑一次干净 baseline(rm -rf dist node_modules/.vite 再 time npm run build),记下中位数;然后按两步法切 rolldown-vite;最后对照 Rolldown 的兼容性说明逐个核对你用到的插件。升级到底是一个下午还是一整周,取决于你插件列表里有没有人碰了内部 API——这个在你动手之前就能查清楚。
评论区
登录后可评论。