Rolldown logo

Rolldown

基于 Rust 的高性能 JavaScript/TypeScript 打包器,提供 Rollup 兼容 API,作为 Vite 8+ 的默认打包引擎。

精选工具BundlerRustRollup 兼容Vite 8

Rolldown 是 VoidZero 用 Rust 开发的 JS/TS 打包器,完全兼容 Rollup 插件 API,构建速度比 Rollup 快 10-30 倍,已成为 Vite 8+ 的默认打包引擎。

Rolldown

基于 Rust 的高性能 JavaScript/TypeScript 打包器,提供 Rollup 兼容 API,作为 Vite 8+ 的默认打包引擎。

技术简介说明

Rolldown 是由 VoidZero 公司开发的 JavaScript/TypeScript 打包器,使用 Rust 编写。它的核心目标是统一 Vite 原有的双打包器架构——用单一工具同时替代 esbuild(负责转换)和 Rollup(负责打包),消除两套转换管线、两套插件系统以及日益膨胀的胶水代码。

Rolldown 的设计哲学是"Rollup 的 API + esbuild 的速度"。它完全兼容 Rollup 的插件接口和配置选项,同时借助 Rust 和 Oxc(同样由 VoidZero 开发的 JavaScript 解析器/压缩器)实现比 Rollup 快 10-30 倍 的构建速度。这意味着现有 Vite/Rollup 生态的插件几乎无需修改即可迁移到 Rolldown。

2025 年 5 月 Rolldown-Vite 技术预览版发布,2025 年 12 月 Vite 8 Beta 将 Rolldown 集成为默认打包器,2026 年 3 月 Vite 8 正式版发布,2026 年 5 月 Rolldown 1.0 稳定版正式发布。截至目前,Rolldown 的周下载量已超过 2000 万次,被 Framer、Ramp、Mercedes-Benz.io、Beehiiv、PLAID 等公司在生产环境中使用。

基本信息

  • 官网:https://rolldown.rs/
  • GitHub:https://github.com/rolldown/rolldown
  • License:MIT
  • 最新版本:v1.1.4(2026 年 7 月)
  • 主要维护者/公司:VoidZero Inc.(Vite、Vitest、Oxc 的创建者,已加入 Cloudflare)
  • 代码语言构成:Rust 69.3%、TypeScript 20.1%、JavaScript 10.3%
  • GitHub Stars:13.8k+
  • 贡献者:约 200 人

快速上手

安装

使用任意包管理器将 Rolldown 安装为开发依赖:

# npm
npm install -D rolldown
 
# pnpm(推荐)
pnpm add -D rolldown
 
# yarn
yarn add -D rolldown
 
# bun
bun add -D rolldown

安装完成后验证:

npx rolldown --version

基础配置

在项目根目录创建 rolldown.config.js(ESM 格式):

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

也可以使用 defineConfig 导出数组来并行执行多个构建:

export default defineConfig([
  {
    input: 'src/index.js',
    output: { file: 'dist/esm.js', format: 'esm', cleanDir: true },
  },
  {
    input: 'src/index.js',
    output: { file: 'dist/cjs.js', format: 'cjs' },
  },
])

最小示例

src/main.js

import { greet } from './utils.js'
console.log(greet('Rolldown'))

src/utils.js

export function greet(name) {
  return `Hello, ${name}!`
}

CLI 构建:

npx rolldown src/main.js --file dist/bundle.js

在 package.json 中配置脚本:

{
  "scripts": {
    "build": "rolldown -c rolldown.config.js"
  }
}

编程式 API:

import { build, rolldown } from 'rolldown'
 
// 方式一:build() 一步完成(写入磁盘)
await build({
  input: 'src/index.js',
  output: {
    file: 'dist/bundle.js',
    format: 'esm',
  },
})
 
// 方式二:rolldown() 分步操作
const bundle = await rolldown({ input: 'src/index.js' })
// generate() 生成内存中的产物
const { output } = await bundle.generate({ format: 'esm' })
// write() 写入磁盘
await bundle.write({ file: 'dist/bundle.js', format: 'esm' })
 
// 方式三:watch 模式
import { watch } from 'rolldown'
const watcher = await watch({
  input: 'src/index.js',
  output: { file: 'dist/bundle.js', format: 'esm' },
})
// 关闭时返回 Promise
await watcher.close()

核心概念与架构

架构设计

Rolldown 采用 Rust 核心 + Node.js 绑定 的分层架构:

┌─────────────────────────────────────┐
│           JavaScript API            │
│   (defineConfig / build / watch)    │
├─────────────────────────────────────┤
│          napi-rs 绑定层             │
│     (Rust ↔ Node.js 桥接)          │
├─────────────────────────────────────┤
│          Rust 核心引擎              │
│  ┌─────────┬──────────┬──────────┐  │
│  │  Oxc    │  解析器   │  压缩器  │  │
│  │ Parser  │ Resolver │ Minifier │  │
│  ├─────────┼──────────┼──────────┤  │
│  │   模块图构建 / 代码分割 / DCE   │  │
│  └─────────────────────────────────┘  │
└─────────────────────────────────────┘
  • Oxc:负责 JavaScript/TypeScript 的解析、转换和压缩,是一个用 Rust 编写的高性能 JavaScript 工具链
  • napi-rs:用于创建 Node.js 原生插件,将 Rust 核心暴露给 JavaScript 层
  • 平台特定包:为不同操作系统/架构提供预编译的原生二进制(如 @rolldown/darwin-arm64@rolldown/linux-x64-gnu),避免用户本地编译

工作原理

  1. 解析阶段:Oxc 解析器将源代码解析为 AST
  2. 模块解析:构建完整的模块依赖图
  3. 转换阶段:执行 TypeScript 降级、JSX 转换等
  4. Tree Shaking:基于 @__PURE__@__NO_SIDE_EFFECTS__sideEffects 等进行激进死代码消除
  5. 代码分割:支持 webpack 风格的 chunk 规则进行细粒度分割
  6. 输出生成:通过插件钩子生成最终产物,支持 ESM、CJS、IIFE 等多种格式

插件系统

Rolldown 完全兼容 Rollup 插件 API,插件分为两个阶段的钩子:

构建阶段钩子(Build Hooks):

  • optionsbuildStartresolveIdloadtransformmoduleParsedresolveDynamicImportbuildEndwatchChangecloseWatchercloseBundle

输出生成钩子(Output Hooks):

  • renderStartbeforeAddonsbanner/footer/intro/outrorenderChunkafterAddonsaugmentChunkHashgenerateBundlewriteBundlerenderErrorcloseBundle

Hook Filters(钩子过滤器) 是 Rolldown 的重要优化——当插件声明了 idcodemoduleType 过滤器时,如果不匹配,插件调用将跳过 Rust ↔ JavaScript 的跨语言通信,显著减少性能开销。

// 虚拟模块插件示例
export function myPlugin() {
  const virtualId = 'virtual:example'
  const resolvedId = '\0' + virtualId
 
  return {
    name: 'my-virtual-plugin',
    resolveId(id) {
      if (id === virtualId) return resolvedId
    },
    load(id) {
      if (id === resolvedId) return `export default 'Hello from virtual module!'`
    },
  }
}

核心特性

  • Rollup 兼容 API:完全兼容 Rollup 的插件接口和配置选项,现有 Vite/Rollup 插件几乎无需修改即可迁移
  • 10-30x 性能提升:相比 Rollup,构建速度提升 10-30 倍,性能与 esbuild 相当,项目越大优势越明显
  • 激进死代码消除(DCE):支持 @__PURE__@__NO_SIDE_EFFECTS__sideEffects 字段,精确消除未使用代码
  • 智能内联:自动内联常量和 TypeScript const enum,减少运行时开销
  • 细粒度代码分割:支持 webpack 风格的 advancedChunks 规则,Framer 借此实现了 67% 的 chunk 数量缩减
  • 内置 Rust 插件replacePluginesmExternalRequirePlugin 等原生插件替代常见 Rollup 生态依赖,无需 JavaScript 开销
  • Hook Filters 优化:通过声明式过滤器将不匹配的插件调用留在 Rust 侧,跳过 JS 桥接开销
  • 多格式输出:支持 ESM、CJS、IIFE 等输出格式,可在一次构建中生成多种格式
  • Watch 模式(实验性):基于新的原生文件系统监视器,更可靠、更快,支持 WASM
  • DCE-only 压缩:仅剥离死代码而不混淆标识符,适合需要可读输出的场景
  • 原生 MagicString(实验性):JavaScript 版本的 Rust 替代品,提供更好的转换性能和更少依赖
  • tsconfig 支持:自动读取 tsconfig.json 配置

生态图

生态系统概览

Rolldown 是 VoidZero 统一 JavaScript 工具链愿景的核心组成部分:

                    VoidZero 工具链生态
    ┌──────────────────────────────────────────┐
    │                                          │
    │   ┌─────────┐   ┌─────────┐   ┌───────┐  │
    │   │  Vite   │   │ Vitest  │   │ Vite+ │  │
    │   │ 构建工具 │   │ 测试框架 │   │统一平台│  │
    │   └────┬────┘   └─────────┘   └───────┘  │
    │        │                                  │
    │   ┌────▼────────────────────────────┐     │
    │   │         Rolldown                │     │
    │   │      JavaScript 打包器          │     │
    │   └────┬────────────┬──────────────┘     │
    │        │            │                     │
    │   ┌────▼────┐  ┌────▼────┐               │
    │   │   Oxc   │  │ Lightning│               │
    │   │解析/压缩 │  │  CSS     │               │
    │   └─────────┘  └─────────┘               │
    └──────────────────────────────────────────┘

关键上层工具

工具说明链接
Vite 8+Rolldown 作为默认打包器,替代 Rollup + esbuildhttps://vite.dev/guide/rolldown
tsdown基于 Rolldown 的 TypeScript 库打包器,零配置生成 .d.tshttps://tsdown.dev/
Rolldown-ViteVite 的 Rolldown 集成技术预览(已合并到 Vite 8)https://github.com/vitejs/rolldown-vite

插件兼容性

Rolldown 兼容三大插件生态:

  • Rollup 插件:绝大多数 Rollup 插件可直接使用
  • Rolldown 内置插件replacePluginesmExternalRequirePlugin 等 Rust 原生插件
  • Unplugin 生态:通过 Unplugin 可跨 Webpack/Vite/Rolldown/esbuild 等平台复用插件
  • 部分 Vite 插件:Vite 特有插件在 Rolldown 上也基本可用

社区生态

  • GitHub:https://github.com/rolldown/rolldown (13.8k+ stars)
  • npm 周下载量:2000 万+
  • 贡献者:约 200 人
  • 已知生产用户:Framer、Ramp、Mercedes-Benz.io、Beehiiv、PLAID、Shopify、OpenAI、Cloudflare

适用场景

  • Vite 项目打包:Rolldown 已作为 Vite 8+ 的默认打包器,使用 Vite 的项目无需额外配置即可享受性能提升
  • 库/包开发:作为 Rollup 的直接替代品,适用于构建 npm 包、组件库、SDK 等。tsdown 进一步简化了 TypeScript 库的打包流程
  • 大型应用构建:项目规模越大,Rolldown 相比 Rollup 的性能优势越明显(10-30x),适合 monorepo 和大型 SPA
  • 需要快速迭代的开发环境:Watch 模式下的快速增量构建,适合频繁修改的开发场景
  • 多格式发布:需要同时输出 ESM、CJS、IIFE 等多种格式的库开发者
  • 从 Rollup 迁移:API 高度兼容,迁移成本低,可作为 Rollup 的无痛升级路径
  • Monorepo 构建:配合 Turborepo 等工具使用,Rust 级别的构建速度在 Monorepo 中优势显著

开发与工程化

开发流程

项目结构推荐:

my-project/
├── src/
│   ├── index.js          # 入口文件
│   └── ...
├── dist/                  # 构建产物
├── rolldown.config.js     # Rolldown 配置
├── tsconfig.json          # TypeScript 配置(可选)
└── package.json

构建部署

package.json 脚本配置:

{
  "scripts": {
    "build": "rolldown -c rolldown.config.js",
    "build:watch": "rolldown -c rolldown.config.js --watch",
    "dev": "rolldown -c rolldown.config.js --watch"
  }
}

多环境构建:

import { defineConfig } from 'rolldown'
 
export default defineConfig([
  // ESM 输出
  {
    input: 'src/index.js',
    output: {
      file: 'dist/index.esm.js',
      format: 'esm',
      cleanDir: true,
    },
  },
  // CJS 输出
  {
    input: 'src/index.js',
    output: {
      file: 'dist/index.cjs.js',
      format: 'cjs',
    },
  },
])

CI/CD 集成

Rolldown 是纯 CLI 工具,与任何 CI/CD 系统兼容:

# GitHub Actions 示例
- name: Setup Node.js
  uses: actions/setup-node@v4
  with:
    node-version: 22
 
- name: Install dependencies
  run: pnpm install
 
- name: Build
  run: pnpm build
 
- name: Upload artifacts
  uses: actions/upload-artifact@v4
  with:
    name: dist
    path: dist/

注意事项:

  • Rolldown 包含平台特定的原生二进制包,CI 环境需确保正确的 Node.js 版本(22+)
  • Windows CI 建议使用 Dev Drive 或 WSL 以获得更好的文件系统性能
  • 首次安装会根据平台自动下载对应的原生二进制

与 Vite 集成

vite.config.ts 中通过 build.rolldownOptions 配置:

import { defineConfig } from 'vite'
 
export default defineConfig({
  build: {
    rolldownOptions: {
      // Rolldown 特定配置
      output: {
        advancedChunks: {
          // webpack 风格的 chunk 规则
        },
      },
    },
  },
})

性能与安全

性能特点

指标数据
相比 Rollup10-30x 更快
相比 esbuild性能相当
Ramp(真实项目)构建时间减少 57%
Mercedes-Benz.io(真实项目)构建时间减少 38%
Beehiiv(真实项目)构建时间减少 64%
Framerchunk 数量减少 67%

性能优化手段:

  • Rust 核心避免 JavaScript 运行时开销
  • Oxc 解析器/压缩器的高效实现
  • Hook Filters 减少 Rust ↔ JavaScript 跨语言通信
  • 内置 Rust 插件替代 JS 插件,支持并发处理
  • 激进 DCE 减少产物体积

性能瓶颈与优化

Windows 文件系统:Windows 文件系统显著慢于 macOS/Linux,安全软件会加剧问题。

  • 解决方案:使用 Dev Drive 或 WSL(约 10 倍提升)

第三方插件开销:每个 JS 插件调用都涉及 Rust → JS 的跨语言通信。

  • 解决方案:使用 withFilter 限制钩子执行范围;优先使用内置 Rust 插件

eval 使用eval 会合并作用域,阻碍压缩和变量重命名。

  • 解决方案:使用间接 eval (0, eval)('x')new Function('x')

安全注意事项

  • eval 风险eval 不仅影响性能,还存在安全隐患。打包器合并作用域后,私有变量可能被暴露
  • Source Map 准确性:当插件修改代码但未提供映射数据时,可能出现 Source Map 不正确的警告
  • 执行上下文:Rolldown 不维护导出方法的标准模块命名空间上下文,不应依赖执行上下文
  • 初始化顺序:顶层类被重写为变量赋值,可能在循环依赖中被观察为 undefined 而非触发引用错误

技术对比

Rolldown vs Rollup vs Rspack vs esbuild

维度RolldownRollupRspackesbuild
语言RustJavaScriptRustGo
定位Rollup 替代品库打包器Webpack 替代品通用打包器
速度⚡ 极快(10-30x Rollup)🐢 较慢⚡ 极快⚡ 极快
API 兼容Rollup 兼容原生Webpack 兼容独立 API
插件生态Rollup 插件兼容成熟Webpack 插件兼容有限
代码分割优秀(webpack 风格规则)基础优秀(webpack 风格)较弱
Vite 集成✅ 默认打包器(Vite 8+)❌ 已被替代❌ 无关❌ 已被替代
DCE激进(@PURE 等)基础基础基础
1.0 稳定✅ 2026.05✅ 多年前✅ 2024✅ 多年前
适用场景Vite 项目、库打包库打包应用打包(Webpack 迁移)快速原型

核心差异说明

  • Rolldown vs Rollup:直接替代关系。Rolldown 提供相同的 API 和插件接口,但速度快 10-30 倍。Rollup 生态的插件可以几乎无损迁移
  • Rolldown vs Rspack不直接竞争。Rolldown 替代 Rollup(库/Vite 场景),Rspack 替代 Webpack(应用/Webpack 场景)。社区共识:"Rspack 之于 Webpack,正如 Rolldown 之于 Rollup"
  • Rolldown vs esbuild:Rolldown 在速度上与 esbuild 相当,但在代码分割、插件生态、Rollup 兼容性方面更优。Vite 此前使用 esbuild 做转换 + Rollup 做打包,Rolldown 统一了这两者
  • 为什么不用 esbuild:Rolldown 创建的原因之一是 esbuild 的代码分割能力较弱,且 Rollup 速度太慢。Rolldown 同时解决了这两个问题

最佳实践

生产环境建议

  1. 优先使用 Vite 8+:Rolldown 已作为 Vite 8 的默认打包器,通过 Vite 使用可以获得完整的开发体验(HMR、Dev Server 等)
  2. 启用 Hook Filters:为插件声明 idcodemoduleType 过滤器,减少不必要的 Rust ↔ JS 通信
  3. 使用内置 Rust 插件:用 replacePlugin 等内置插件替代 @rollup/plugin-replace 等 JS 插件
  4. 配置 advancedChunks:替代已废弃的 manualChunks,使用 webpack 风格的细粒度 chunk 规则
  5. 利用 sideEffects:在 package.json 中正确声明 sideEffects 字段,帮助 DCE 更精确地工作
  6. 使用 tsconfig 选项:自动读取 TypeScript 配置,避免手动重复配置

常见陷阱

  1. manualChunks 已废弃:迁移到 advancedChunks
  2. transformWithEsbuild 不可用:Vite 8 不再内置 esbuild,需手动安装或使用 transformWithOxc
  3. 非 JS 模块需声明类型:在 loadtransform 钩子中将非 JavaScript 资产转换为 JS 时,必须返回 moduleType: 'js'
  4. 不支持的 Rollup 选项shouldTransformCachedModuleresolveImportMetaresolveFileUrlrenderDynamicImport 目前不支持
  5. Windows 性能问题:在 Windows 上构建可能较慢,建议使用 Dev Drive 或 WSL
  6. 插件返回 Source Map:插件修改代码后必须提供 Source Map,否则会出现警告

推荐模式

// 推荐的库打包配置
import { defineConfig } from 'rolldown'
 
export default defineConfig({
  input: 'src/index.ts',
  output: [
    { file: 'dist/index.esm.js', format: 'esm', cleanDir: true },
    { file: 'dist/index.cjs.js', format: 'cjs' },
  ],
  // 利用 sideEffects 进行精确 DCE
  treeshake: {
    moduleSideEffects: false,
  },
  // 声明平台
  platform: 'node',
  // 自动读取 tsconfig
  tsconfig: 'tsconfig.json',
})

技术局限与边界

已知限制

  1. 部分 Rollup 选项不支持shouldTransformCachedModuleresolveImportMetaresolveFileUrlrenderDynamicImport 等 Rollup 选项目前不可用
  2. Windows 性能:Windows 文件系统显著慢于 macOS/Linux,需要额外优化(Dev Drive / WSL)
  3. eval 处理eval 会导致作用域合并,阻碍压缩,存在安全和正确性风险
  4. 执行上下文限制:不维护导出方法的标准模块命名空间上下文,可能影响 Tree Shaking
  5. 初始化顺序偏差:顶层类被重写为变量赋值,可能在循环依赖中表现为 undefined
  6. 插件生态仍在完善:虽然兼容 Rollup 插件,但部分高级插件可能需要适配
  7. 配置警告:遇到无法识别的配置键时会发出警告,需确保配置正确

不适用场景

  • 需要 Webpack 生态的项目:如果项目深度依赖 Webpack 特有功能(如 Module Federation、大量 Webpack loader),应使用 Rspack 而非 Rolldown
  • 遗留 Webpack 项目迁移:从 Webpack 迁移到 Rolldown 的迁移成本远高于从 Rollup 迁移
  • 非 JavaScript 资源处理:Rolldown 聚焦于 JavaScript/TypeScript 打包,复杂的 CSS/图片/字体处理建议交给 Vite 或专门的工具

迁移注意事项

  • Rollup 迁移:成本最低,API 高度兼容,主要检查不支持的选项和插件
  • esbuild 迁移:需要调整配置格式,但功能基本对等
  • Webpack 迁移:建议先迁移到 Rspack,而非直接迁移到 Rolldown
  • 升级到 Vite 8:Vite 8 自动集成 Rolldown,大部分情况下无需额外改动,但需注意 manualChunksadvancedChunks 的迁移

学习资源

官方文档

教程与文章

社区资源

视频资源

2026 年现状

版本状态

里程碑时间说明
首次公开版本 0.10.12024 年 4 月初始发布
1.0.0-beta.12024 年 12 月确定 1.0 范围
rolldown-vite 技术预览2025 年 5 月Vite 集成预览
Vite 8 Beta2025 年 12 月Rolldown 作为默认打包器
1.0 RC2026 年 1 月API 稳定性确认
Vite 8 正式版2026 年 3 月Rolldown 集成到稳定版 Vite
1.0 稳定版2026 年 5 月正式稳定,API 锁定
1.1.4(当前最新)2026 年 7 月持续迭代修复

社区活跃度

  • GitHub Stars:13.8k+
  • npm 周下载量:2000 万+
  • 贡献者:约 200 人
  • VoidZero 已加入 Cloudflare,获得更大的企业支持和资源
  • 被 Shopify、OpenAI、Mercedes-Benz、Cloudflare 等公司在生产环境中使用

发展趋势与未来路线图

已发布的实验性特性:

  • Watch 模式(基于新的原生文件系统监视器)
  • 原生 MagicString(Rust 实现,替代 JS 版本)
  • 惰性 Barrel 优化(lazy barrel optimization):分析导出,仅编译实际使用的 barrel 模块

即将推出的功能(2026 Q3+):

  1. Vite Full Bundle Mode:开发环境也使用打包模式(而非当前的逐文件 ESM),初步结果显示:
    • 3x 更快的开发启动
    • 40% 更快的全量重载
    • 10x 更少的网络请求
  2. 稳定化惰性 Barrel 优化:减少构建时间和产物体积
  3. 2026 Q3 计划:已在 GitHub Issue #10042 公开,包含详细的目标和时间线

总结

Rolldown 在 2026 年已经从"实验性 Rust 打包器"成长为前端工具链的核心基础设施。随着 Vite 8 的发布和 1.0 稳定版的落地,Rolldown 已经成为 JavaScript 打包领域的标杆工具。VoidZero 加入 Cloudflare 后,其发展获得了更强的企业级支撑,未来在 Full Bundle Mode、性能优化和生态完善方面值得持续关注。