现状:Vite 的双引擎困境

Vite 之所以快,是因为它把工作分给了两个工具:

  • 开发态:esbuild 做依赖预构建(Go 编写,极快),浏览器原生 ESM 直接加载源码;
  • 生产态:Rollup 做打包(JS 编写,插件生态丰富,但受限于单线程 V8)。

问题在于两个引擎的行为不完全一致,某些插件在 dev 正常、build 报错;而且 Rollup 在超大项目上构建时间常常以分钟计。

Rolldown:用 Rust 重写 Rollup

Rolldown 是 Vite 团队用 Rust 编写的打包器,目标很直接:兼容 Rollup 的插件与配置接口,但性能高一个数量级,并统一 dev/build 两条链路。

npm i -D vite@latest rolldown-vite@latest
// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";

export default defineConfig({
  plugins: [react()],
  build: {
    // 使用 Rolldown 作为打包器
    rollupOptions: {
      output: {
        // 更激进的 chunk 拆分
        advancedChunks: {
          groups: [
            { name: "react", test: /node_modules[\\/](react|react-dom)/ },
            { name: "vendor", test: /node_modules/ },
          ],
        },
      },
    },
  },
});

关键收益:

  1. 构建速度:Rust + 多线程,大型项目的生产构建通常能快 3~10 倍;
  2. 内存占用:不再受 V8 堆上限限制,超大仓库不再 OOM;
  3. 行为一致:dev 和 build 走同一套模块解析与转换逻辑,减少“本地好使线上报错”。

实战:分析一次构建

# 生成构建分析报告
npx vite build --mode production && npx vite-bundle-visualizer
// 自定义插件:统计模块数量
import type { Plugin } from "vite";

export function moduleStats(): Plugin {
  let count = 0;
  return {
    name: "module-stats",
    transform(_code, id) {
      if (id.includes("node_modules")) count += 1;
      return null;
    },
    buildEnd() {
      console.log(`[stats] 共处理 ${count} 个依赖模块`);
    },
  };
}

由于 Rolldown 兼容 Rollup 插件 API,绝大多数现有插件可以直接复用,迁移成本远低于换一套构建体系。

配合 Vite 7 的其他新能力

export default defineConfig({
  // Environment API:为不同目标(client/ssr/edge)配置独立环境
  environments: {
    client: {
      build: { outDir: "dist/client" },
    },
    ssr: {
      build: { outDir: "dist/server", ssr: true },
    },
  },

  // 更快的冷启动:持久化预构建缓存
  optimizeDeps: {
    holdUntilCrawlEnd: false,
  },
});

Environment API 是 Vite 6/7 引入的重要抽象,让“一次配置、多端产出”成为一等公民,配合 Rolldown 可以并行构建多个产出目标。

迁移检查清单

{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "build:analyze": "vite build --debug"
  }
}
  1. 先在项目里并行安装 rolldown-vite,通过 alias 覆盖 vite,跑一次构建对比产物;
  2. 检查自定义插件是否用了 Rollup 内部未公开 API(这类最容易不兼容);
  3. 对比 sourcemap 与产物体积,确认没有引入重复依赖;
  4. CI 上替换后,观察构建时长与缓存命中率。

小结

前端构建正在进入“Rust 化”阶段:esbuild、SWC、Rspack、Biome、Rolldown、Oxc 形成一个完整的工具链矩阵。Vite 7 + Rolldown 的组合,意味着开发者几乎不用改配置就能享受数量级的性能提升——这可能是近几年性价比最高的一次升级。