Rolldown 是 Vite 团队正在开发的 Rust 打包器。它的目标是成为 Rollup 的高性能替代品,速度接近 esbuild,同时保持 Rollup 的插件兼容性。
这个项目由尤雨溪主导,背后的想法很简单:Vite 开发环境用 esbuild 预构建依赖,生产环境用 Rollup 打包。两套工具有时候会导致行为不一致。如果有一个工具既快又兼容 Rollup 插件,就能统一开发和生产的构建流程。
项目背景#
Vite 的架构是这样的:
开发环境: 依赖 → esbuild 预构建 → 浏览器原生 ESM
生产环境: 源码 + 依赖 → Rollup 打包 → 产物这个架构有几个问题:
- esbuild 和 Rollup 行为不完全一致:有时候开发正常,生产出问题
- Rollup 速度是瓶颈:大型项目生产构建可能要几分钟
- 两套插件系统:esbuild 插件和 Rollup 插件不通用
Rolldown 的解决方案:
开发 + 生产: Rolldown(Rust 速度 + Rollup 兼容)当前状态#
Rolldown 目前还在积极开发中。截至 2025 年初,它已经:
- ✅ 发布了 beta 版本
- ✅ 基本的打包功能可用
- ✅ 部分 Rollup 插件兼容
- ⏳ 还在完善中,不建议生产使用
可以关注官方进度:
# 安装尝鲜npm install rolldown@beta
# 或者用最新版npm install rolldown@latest基本使用#
命令行#
# 打包npx rolldown src/index.js -o dist/bundle.js
# 指定配置文件npx rolldown -c rolldown.config.js配置文件#
Rolldown 的配置和 Rollup 非常像:
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 的插件可能需要适配。
输出格式#
支持的格式:
esm- ES Modulecjs- CommonJSiife- 立即执行函数
性能预期#
根据早期测试,Rolldown 的性能目标:
| 场景 | Rollup | Rolldown | 提升 |
|---|---|---|---|
| 冷构建 | 10s | 0.5s | 20x |
| 增量构建 | 3s | 0.1s | 30x |
这些数字会随着项目规模和复杂度变化,但数量级的提升是可以期待的。
与 esbuild 的区别#
为什么不直接用 esbuild?
| 对比项 | esbuild | Rolldown |
|---|---|---|
| 插件系统 | 有限 | 兼容 Rollup |
| Tree Shaking | 基础 | 更精细 |
| 代码分割 | 基础 | 更灵活 |
| 生态兼容 | 需要适配 | Rollup 插件可用 |
Rolldown 的定位是:esbuild 的速度 + Rollup 的生态。
在 Vite 中的规划#
Rolldown 最终会集成到 Vite 中,替代现有的 esbuild + Rollup 组合:
现在的 Vite:
vite dev → esbuild (依赖预构建)vite build → Rollup (生产打包)未来的 Vite:
vite dev → Rolldownvite build → Rolldown这样可以:
- 统一开发和生产的行为
- 复用同一套插件
- 进一步提升构建速度
尝试使用#
虽然还不稳定,但可以尝试:
安装#
npm install rolldown@beta --save-dev简单示例#
export default { input: 'src/index.js', output: { dir: 'dist', format: 'esm', },}npx rolldown -c带插件的示例#
import resolve from '@rollup/plugin-node-resolve'
export default { input: 'src/index.js', output: { dir: 'dist', format: 'esm', }, plugins: [resolve()],}关注的问题#
作为新工具,使用时需要注意:
还在开发中#
- API 可能会变化
- 有些功能还没实现
- 遇到 bug 是正常的
插件兼容性#
- 并非所有 Rollup 插件都能用
- 一些复杂插件需要等适配
生产使用#
- 目前不建议生产环境使用
- 等稳定版发布再考虑
何时使用#
现在可以:
- 关注项目进展
- 在个人项目中尝试
- 给项目提 issue 和反馈
等稳定后:
- 迁移现有 Rollup 项目
- 在 Vite 项目中使用
- 生产环境部署
与其他工具对比#
| 对比项 | Rolldown | Rollup | esbuild | Webpack |
|---|---|---|---|---|
| 语言 | Rust | JavaScript | Go | JavaScript |
| 速度 | 极快(预期) | 中等 | 极快 | 慢 |
| 插件生态 | 兼容 Rollup | 丰富 | 有限 | 最丰富 |
| Tree Shaking | 好(预期) | 最好 | 良好 | 良好 |
| 状态 | Beta | 稳定 | 稳定 | 稳定 |
| 适用场景 | 待定 | 库 | 库、简单应用 | 复杂应用 |