Skip to content

Rolldown - Vite 团队打造的 Rust 打包器

Rolldown 是 Vite 团队正在开发的 Rust 打包器。它的目标是成为 Rollup 的高性能替代品,速度接近 esbuild,同时保持 Rollup 的插件兼容性。

这个项目由尤雨溪主导,背后的想法很简单:Vite 开发环境用 esbuild 预构建依赖,生产环境用 Rollup 打包。两套工具有时候会导致行为不一致。如果有一个工具既快又兼容 Rollup 插件,就能统一开发和生产的构建流程。

项目背景#

Vite 的架构是这样的:

开发环境:
依赖 → esbuild 预构建 → 浏览器原生 ESM
生产环境:
源码 + 依赖 → Rollup 打包 → 产物

这个架构有几个问题:

  1. esbuild 和 Rollup 行为不完全一致:有时候开发正常,生产出问题
  2. Rollup 速度是瓶颈:大型项目生产构建可能要几分钟
  3. 两套插件系统:esbuild 插件和 Rollup 插件不通用

Rolldown 的解决方案:

开发 + 生产:
Rolldown(Rust 速度 + Rollup 兼容)

当前状态#

Rolldown 目前还在积极开发中。截至 2025 年初,它已经:

可以关注官方进度:

Terminal window
# 安装尝鲜
npm install rolldown@beta
# 或者用最新版
npm install rolldown@latest

基本使用#

命令行#

Terminal window
# 打包
npx rolldown src/index.js -o dist/bundle.js
# 指定配置文件
npx rolldown -c rolldown.config.js

配置文件#

Rolldown 的配置和 Rollup 非常像:

rolldown.config.js
import { defineConfig } from 'rolldown'
export default defineConfig({
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
})

JavaScript API#

import { rolldown } from 'rolldown'
const bundle = await rolldown({
input: 'src/index.js',
})
await bundle.write({
file: 'dist/bundle.js',
format: 'esm',
})

与 Rollup 的兼容性#

Rolldown 的设计目标是高度兼容 Rollup:

配置兼容#

大部分 Rollup 配置可以直接迁移:

// 这些配置在两者中都能用
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
sourcemap: true,
},
external: ['react', 'react-dom'],
plugins: [
// ...
],
}

插件兼容#

Rolldown 支持 Rollup 插件 API:

import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
export default {
input: 'src/index.js',
plugins: [
resolve(), // Rollup 插件可以直接用
commonjs(),
],
}

但要注意,并非所有插件都完全兼容。一些依赖 Rollup 内部 API 的插件可能需要适配。

输出格式#

支持的格式:

性能预期#

根据早期测试,Rolldown 的性能目标:

场景RollupRolldown提升
冷构建10s0.5s20x
增量构建3s0.1s30x

这些数字会随着项目规模和复杂度变化,但数量级的提升是可以期待的。

与 esbuild 的区别#

为什么不直接用 esbuild?

对比项esbuildRolldown
插件系统有限兼容 Rollup
Tree Shaking基础更精细
代码分割基础更灵活
生态兼容需要适配Rollup 插件可用

Rolldown 的定位是:esbuild 的速度 + Rollup 的生态

在 Vite 中的规划#

Rolldown 最终会集成到 Vite 中,替代现有的 esbuild + Rollup 组合:

现在的 Vite:

vite dev → esbuild (依赖预构建)
vite build → Rollup (生产打包)

未来的 Vite:

vite dev → Rolldown
vite build → Rolldown

这样可以:

  1. 统一开发和生产的行为
  2. 复用同一套插件
  3. 进一步提升构建速度

尝试使用#

虽然还不稳定,但可以尝试:

安装#

Terminal window
npm install rolldown@beta --save-dev

简单示例#

rolldown.config.js
export default {
input: 'src/index.js',
output: {
dir: 'dist',
format: 'esm',
},
}
Terminal window
npx rolldown -c

带插件的示例#

rolldown.config.js
import resolve from '@rollup/plugin-node-resolve'
export default {
input: 'src/index.js',
output: {
dir: 'dist',
format: 'esm',
},
plugins: [resolve()],
}

关注的问题#

作为新工具,使用时需要注意:

还在开发中#

插件兼容性#

生产使用#

何时使用#

现在可以:

等稳定后:

与其他工具对比#

对比项RolldownRollupesbuildWebpack
语言RustJavaScriptGoJavaScript
速度极快(预期)中等极快
插件生态兼容 Rollup丰富有限最丰富
Tree Shaking好(预期)最好良好良好
状态Beta稳定稳定稳定
适用场景待定库、简单应用复杂应用

跟进方式#

参考资料#