Vite 7 升到 8,Rolldown 和默认浏览器目标会动到哪?

群里有人丢来 Migration from v7,package.json 还停在 Vite 7。翻完一圈,日常构建真正会撞上的,多半是两处写得很靠前的变化:打包链路换成 Rolldown + Oxc,以及默认浏览器目标往上抬了一档。站里另有一篇讲生产构建里丢掉 console 的副作用,同属构建侧,跟这次大版本迁移不是一回事。

默认浏览器目标抬了

迁移页把 Default Browser Target 标成了对从 rolldown-vite 过来也适用的变更。build.target 和 'baseline-widely-available' 的默认值更新成:

  • Chrome / Edge:107 → 111
  • Firefox:104 → 114
  • Safari:16.0 → 16.4

文档写明,这组版本对齐的是 2026-01-01 那一档 Baseline Widely Available,大约都是两年半以前发的浏览器。业务如果还要硬撑更老的内置 WebView,或者公司镜像里锁死了很旧的 Chromium,升完以后别急着把 build.target 留空就合主分支。先看产物里有没有用到新基线才放行的语法,再决定要不要显式写回更低的目标。有人会习惯在 browserslist 里另写一档。那和 Vite 自己的 build.target 默认值不是自动同步的,两边都要看一眼,避免「本地能跑、产物基线已经抬高」的错位。

打包侧换成 Rolldown

Vite 8 用 Rolldown 和基于 Oxc 的工具替换原来的 esbuild / Rollup。官方给了一条渐进路径:先装技术预览包 rolldown-vite,它实现的是「Vite 7 + Rolldown」,还没有 Vite 8 其它变更。在这一步把依赖优化、插件、产物差异摸清楚,再把 package.json 里的别名改回正式的 vite 并升到 8。迁移页示例是从 vite: "npm:rolldown-vite@7.2.2" 换成 vite: "^8.0.0"。已经在 Vite 7 上试过 rolldown-vite 的人,迁移页开头也写了:再往 8 走时,主要看带 NRV 标记的章节(默认浏览器目标、若干移除项),Rolldown 本体那一段大多已经经历过。

依赖预构建也改成走 Rolldown。旧的 optimizeDeps.esbuildOptions 仍会被自动映射到 optimizeDeps.rolldownOptions,但文档已经标成 deprecated,鼓励改成新字段。映射表里能直接对上的包括 minify、treeShaking、define、loader、platform、plugins(部分)等。需要核对最终落盘配置时,可以在 configResolved 里打出 config.optimizeDeps.rolldownOptions。JS 变换和压缩默认也切到 Oxc,旧的顶层 esbuild 选项同样有兼容层,长期仍要迁到 oxc / build.rolldownOptions。CSS 压缩默认改成 Lightning CSS,必要时可用 build.cssMinify: 'esbuild' 临时退回,但要自己把 esbuild 装回开发依赖。

不要默认「升完一定更快」。迁移页列的是工具替换、弃用项和行为差异,没有给你一张可写进对内 RFC 的性能承诺表。自己仓库前后对比另说,别拿别人的观感当验收标准。

升之前先核对这几件

  • 业务最低浏览器 / WebView 还低于上面那组默认值的话,升完后显式设置 build.target,并在真机或对应内核上点一遍主要路径。
  • 配置里还有没有大段 optimizeDeps.esbuildOptions、esbuild.*、build.rollupOptions。能先改成 rolldownOptions / oxc 的先改,减少兼容层撤掉以后的一次性爆炸。build.rollupOptions 在文档里已标成改名到 build.rolldownOptions 的弃用项。
  • 插件有没有直接调用已弃用的 transformWithEsbuild。文档说 Vite 不再直接依赖 esbuild,这类插件可能要你自己把 esbuild 装回 devDependency,或改走 transformWithOxc。
  • CommonJS 的 default 互操作、对象形式的 manualChunks、UMD/IIFE 里的 import.meta.url 等,迁移页后半段都有单独说明。仓库如果大量吃 CJS 包或还在出 UMD,这几节最好单独过一遍,而不是只盯 Rolldown 四个字。临时想恢复旧的 CJS interop,文档提供了已弃用的 legacy.inconsistentCjsInterop: true,只适合过渡。

渐进迁移适合依赖多、插件杂的老项目:先 rolldown-vite 暴露打包差异,再上 Vite 8 吃默认浏览器目标和其余 NRV 变更。小仓库也可以直接升 8,但把浏览器目标和弃用配置两项写进检查清单,比升完再在 CI 红片里猜要省事。装饰器降级、property mangling 等 Oxc 暂不支持的能力,迁移页指向了 Babel / SWC 或上游 issue,用到再按需加,不必一上来全仓库铺插件。

你们是先试了 rolldown-vite,还是直接跳到 8?默认浏览器目标有没有逼你们改 build.target?