Vite 8:统一 Rust 打包器 Rolldown,构建速度最高提升 30 倍

2026-05-19 18 预计阅读时间:1 分钟
来源:infoq.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:6 分钟

前端构建工具的"双引擎"时代正在收场。Vite 8.0 把开发服务器和生产构建统一交给了 Rust 编写的 Rolldown,部分项目构建时间从 46 秒压缩到 6 秒,同时保留了现有插件生态的兼容性。这次改动不只是换了个更快的心脏——它意味着 Vite 的 dev 和 build 终于用同一套模块解析逻辑,消除了长期困扰开发者的"开发能跑、构建报错"问题。

双打包器的问题到底在哪

Vite 此前的架构依赖两个不同的打包器:

  • 开发阶段:esbuild(Go 编写),负责即时编译和热更新,速度极快但对模块语义的处理与标准不完全一致。
  • 生产构建:Rollup(JavaScript 编写),负责最终打包输出,语义更标准但速度慢得多。

这套组合的实际代价是:你在 npm run dev 下跑得好好的代码,npm run build 时可能因为 Rollup 对模块解析、tree-shaking、副作用标记的规则不同而报错或产出不同结果。调试这种"环境不一致"问题,远比慢本身更让人头疼。

Rolldown 用 Rust 重写,同时覆盖了 esbuild 的速度优势和 Rollup 的语义准确性。一个打包器管两件事,行为天然一致。

30 倍速度提升从何而来

摘要中提到的"46 秒 → 6 秒"来自社区项目的实测反馈。Rust 在计算密集型任务上相比 JavaScript 有结构性优势——内存布局可控、无 GC 停顿、可充分利用多核并行。Rolldown 在解析、转换、拼接三个阶段都做了并行化设计,而 Rollup 作为 JS 工具,受限于单线程事件循环。

实际提升幅度取决于项目规模和依赖结构。小型项目可能从 3 秒变 1 秒,感知不强;中大型 monorepo 或重度依赖项目才是这次升级的主战场。

动手升级:从 Vite 7 迁移到 Vite 8

以下是一个典型的升级流程,以 pnpm 项目为例:

第一步:更新依赖

# 升级 Vite 核心及相关依赖
pnpm add -D vite@latest

# 如果你用了 Vue/React 插件,一并升级以确保兼容
pnpm add -D @vitejs/plugin-vue@latest
pnpm add -D @vitejs/plugin-react@latest

第二步:确认配置兼容性

Vite 8 的 vite.config.ts 配置格式基本延续 Vite 7,但打包器已内置切换,你不再需要手动指定 bundler 选项:

// vite.config.ts — Vite 8 默认使用 Rolldown,无需额外配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  build: {
    // Rolldown 支持的选项与 Rollup 高度兼容
    // 以下配置照搬即可
    target: 'es2020',
    minify: 'terser',   // 仍可选择 terser 或默认的 minify 策略
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return 'vendor'
          }
        }
      }
    }
  }
})

第三步:跑一次构建,对比时间

# 先用 Vite 7 构建一次,记录时间(如果还没升级)
time npm run build

# 升级后重新构建
time npm run build

# 也可以用 Vite 内置的构建分析看产物结构
npx vite build --mode production

time 命令在 macOS/Linux 终端直接可用,Windows 用户可以用 PowerShell 的 Measure-Command

Measure-Command { npm run build }

插件生态:兼容但有边界

Vite 8 明确保持了与现有插件体系的兼容。大多数基于 Rollup 插件 API 编写的 Vite 插件可以继续工作,因为 Rolldown 在接口层面做了适配。但需要注意几类潜在问题:

  1. 直接依赖 Rollup 内部未文档化行为的插件——这类插件可能需要作者适配 Rolldown 的内部差异。
  2. 使用 this.meta.rollupVersion 做版本分支的插件——Rolldown 会报告自己的版本号,逻辑分支可能走到意外路径。
  3. 自定义 minify 插件——如果你用了 esbuild 作为 minifier(Vite 7 默认),Vite 8 的默认 minify 策略已随 Rolldown 改变,需确认产物压缩效果。

升级后建议跑一遍完整测试套件,重点看构建产物是否与此前一致:

# 跑测试 + 检查产物大小变化
npm run test
ls -lh dist/assets/

什么时候值得升级

场景 建议
构建时间 > 10 秒的中大型项目 尽快升级,收益明显
CI/CD 中构建是瓶颈环节 升级可直接缩短流水线耗时
小型 demo / 个人项目 可以升级,但速度收益有限
依赖了较多未维护的 Rollup 插件 先逐个验证兼容性再升级

Vite 8 的核心价值不只是"更快"——统一打包器带来的行为一致性,才是减少调试时间的根本。如果你曾被 dev/build 行为不一致困扰过,这次升级值得优先安排。


相关推荐