Rolldown
使用 Rust 构建、兼容 Rollup API,并为 Vite 提供统一高性能打包核心的 JavaScript Bundler。
项目概述
Rolldown 将 Rollup 的插件生态和 Tree Shaking 能力与 esbuild 级别的内建转换、解析和打包性能结合起来。它既是 Vite 8+ 的统一 Bundler,也可以独立用于应用或库构建。
Rolldown 是采用 MIT 许可证的 Rust JavaScript/TypeScript Bundler,由 VoidZero 团队和开源社区维护。它的首要目标是成为 Vite 的统一底层打包器,用一套核心替代过去生产构建中的 Rollup 与部分 esbuild 职责,同时保持对 Rollup/Vite Plugin API 的高度兼容。Rolldown 也可以通过 CLI、配置文件、JavaScript API 和 Watch API 独立使用,适合希望获得 Rollup 风格输出控制、又重视大型模块图性能的构建任务。
主要特点
Rolldown 把高性能解析与转换、Rollup 兼容插件和细粒度 Chunk 控制放入同一打包核心。
Rust 高性能核心
解析、依赖图、Tree Shaking、Chunk 生成和输出阶段主要由 Rust 实现,可并行处理大型模块图。
Rollup 兼容 API
配置、rolldown()、watch() 和 Plugin Hook 尽量对齐 Rollup,让现有配置和插件更容易迁移。
为 Vite 设计
Rolldown 作为 Vite 8+ 的统一 Bundler,减少开发依赖优化与生产构建使用不同引擎产生的行为差异。
内建 TypeScript 与 JSX 转换
通过 Oxc 处理 TypeScript、JSX、语法降级和常见转换,许多项目不再需要额外 Babel 或转换插件。
ESM 与 CommonJS 互操作
内建 Node.js 风格模块解析和 ESM/CJS 互操作,减少 @rollup/plugin-commonjs 与 node-resolve 等基础插件需求。
Tree Shaking
基于静态模块分析消除未使用导出,并保留 Rollup 擅长的 Scope Hoisting 和小体积输出方向。
代码拆分与 Chunk 控制
支持动态导入、多个入口、Manual Chunks 与高级代码拆分选项,兼顾缓存、并行请求和共享依赖。
Rollup/Vite 插件生态
大多数标准插件可以复用,并支持 Hook Filter,减少无关模块进入 JavaScript 插件所带来的跨语言调用成本。
内建常用构建能力
提供 alias、define、inject、JSON、Node.js 解析、平台预设、CSS 打包和压缩等能力,减少基础插件数量。
多输出与并行配置
同一输入可生成 ESM、CJS、IIFE 等格式;配置数组还可以并行执行多个独立构建。
CLI、API 与 Watch
既可以用命令行快速打包,也可以通过配置文件、JavaScript Bundler API 和 Watch API 集成内部工具链。
适用场景
需要 Vite 生态兼容、Rollup 风格 API 和更高吞吐量时,可以直接或通过上层工具采用 Rolldown。
Vite 应用生产构建
大多数应用无需直接配置 Rolldown,通过 Vite 获得开发服务器、HMR、插件与优化生产构建的完整体验。
Rollup 项目迁移
希望保留 Rollup 配置和插件模型,同时改善大型模块图构建速度时,可以先在 CI 中进行产物对比试验。
JavaScript 和 TypeScript 库
能够输出 ESM、CJS 等多种格式并控制 external、Chunk 和 Tree Shaking;常规库项目也可使用基于 Rolldown 的 tsdown。
多入口工具与 SDK
适合为浏览器、Node.js、Worker 或不同消费方生成多个入口和输出格式。
构建框架与开发工具
JavaScript API、Plugin Hook 和内建转换能力可作为框架、CLI 或企业内部构建平台的底层引擎。
大型 ESM 模块图
当 Rollup 构建耗时随模块数量明显上升,并且仍需要细粒度 Tree Shaking 和 Chunk 控制时,Rolldown 值得测试。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Rolldown 擅长的地方
- Rust 并行核心面向大型模块图提供较高构建吞吐量
- Rollup 与 Vite Plugin API 兼容,能够复用大量现有生态
- TypeScript、JSX、CommonJS、Node 解析和 Define 等能力内建
- Tree Shaking、Scope Hoisting 与代码拆分兼顾性能和产物体积
- 统一 Vite 开发与生产底层,减少多个构建引擎之间的语义差异
- CLI、配置文件、Bundler API 和 Watch API 覆盖不同集成层级
- 平台预设与 ESM/CJS 多格式输出适合应用、库和工具链
需要注意
采用前应考虑的问题
独立 Rolldown 主要负责打包。应用需要的 HTML、Dev Server、HMR 集成和框架体验通常应由 Vite 提供。
Plugin API 高度兼容 Rollup,但多输出、Watch 和 Hook 执行顺序存在差异;维护内部状态的插件尤其需要验证。
build() 等接口在官方文档中仍标记为实验性,HMR 等低层能力也持续发展;直接集成应锁定版本并阅读变更记录。
当前 npm 包要求 Node.js 20.19+ 或 22.12+,升级前应检查开发机、CI、容器和发布环境。
主流平台提供预编译 Binding,次要或实验平台的支持级别不同;WASI 回退也可能有性能和功能限制。
Rolldown 会移除类型并生成 JavaScript,但不会替代 tsc、vue-tsc 等完整类型检查,应在 CI 中单独运行。
CommonJS、Node Resolve、Alias、JSON、Replace 和压缩等功能已有内建方案。机械复制 Rollup 插件可能降低性能或产生冲突。
即使配置通过,模块互操作、Chunk、执行顺序、Source Map 和 Plugin 输出也可能不同,应运行测试并检查部署资源。
性能取决于模块形态、插件、Source Map、压缩和存储环境,应同时衡量冷构建、增量构建、体积及运行时表现。
快速开始
下面从最小 CLI Bundle 开始,再使用配置文件输出 ESM 与 CJS,并加入一个 Rollup 风格插件。
bashmkdir rolldown-demo
cd rolldown-demo
npm init -y
npm install --save-dev rolldownbashmkdir src
# 创建 src/main.js 后执行
npx rolldown src/main.js --file dist/bundle.js
node dist/bundle.jsjson{
"private": true,
"type": "module",
"scripts": {
"build": "rolldown -c",
"watch": "rolldown -c --watch",
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"rolldown": "^1.2.0"
}
}javascriptimport { defineConfig } from "rolldown";
export default defineConfig({
input: {
index: "src/index.ts",
browser: "src/browser.ts",
},
external: ["react"],
output: [
{
dir: "dist/esm",
format: "esm",
sourcemap: true,
},
{
dir: "dist/cjs",
format: "cjs",
sourcemap: true,
},
],
});typescriptexport type Project = {
name: string;
homepage: string;
};
export function formatProject(project: Project) {
return `${project.name} · ${project.homepage}`;
}
export async function loadSearch() {
return import("./search.js");
}javascriptconst virtualId = "virtual:build-info";
const resolvedId = "\0" + virtualId;
export function buildInfoPlugin() {
return {
name: "build-info",
resolveId(id) {
return id === virtualId ? resolvedId : null;
},
load(id) {
if (id === resolvedId) {
return `export const builtAt = ${JSON.stringify(
new Date().toISOString(),
)}`;
}
return null;
},
};
}javascriptimport { rolldown } from "rolldown";
const bundle = await rolldown({
input: "src/index.ts",
});
await bundle.write({
dir: "dist",
format: "esm",
sourcemap: true,
});
await bundle.close();bashnpm run typecheck
npm run build下一步:Web 应用通常直接使用 Vite,库项目优先评估 tsdown;只有在需要低层输入、输出、插件或 JavaScript API 控制时,才直接维护 Rolldown 配置。迁移 Rollup 前应核对 Plugin Hook 差异和最终产物。
类似项目
Vite 是 Rolldown 最重要的上层使用者;Rspack 与 Webpack 代表应用 Bundler 的其他技术路线,Rollup 和 esbuild 列为外部参考。
Vite
新一代前端构建工具,提供快速开发服务器和优化构建。
查看项目Rspack
以 Rust 构建、采用现代化 Webpack API 的高性能 Web Bundler,兼容大量 Loader 与 Plugin。
查看项目Webpack
高度可配置的静态模块打包器,通过依赖图、Loader 与 Plugin 构建复杂的前端资源流水线。
查看项目TypeScript
为 JavaScript 添加类型语法,提升大型项目的开发体验。
查看项目Rollup
以高质量 ESM 输出、Tree Shaking 和成熟 Plugin API 著称的 JavaScript 模块打包器。
访问官网esbuild
使用 Go 实现,提供高速 JavaScript、TypeScript 转换与打包能力的构建工具。
访问官网tsdown
基于 Rolldown、为 TypeScript 库提供开箱即用配置和声明文件生成的打包工具。
访问官网Rolldown vs Rollup
Rolldown 在配置、JavaScript API 和 Plugin 模型上高度兼容 Rollup,但使用 Rust 与 Oxc 重写核心,并内建更多类似 esbuild 的转换和解析能力。
| 比较维度 | Rolldown | Rollup |
|---|---|---|
| 核心实现 | Rust 核心与 Oxc 工具链 | JavaScript 实现 |
| 主要目标 | 统一 Vite 底层,并兼顾应用与库构建 | 高质量 JavaScript 模块与库打包 |
| 性能模型 | 并行 Rust 管线,面向大型模块图 | 成熟可靠,但大型构建通常更慢 |
| TypeScript / JSX | 通过 Oxc 内建转换和语法降级 | 通常依赖插件或外部转换器 |
| CommonJS / Node 解析 | 常见能力内建 | 通常使用官方 CommonJS 与 Node Resolve 插件 |
| Plugin API | 高度兼容,但存在 Hook 行为差异 | 原生规范和最成熟的插件兼容基准 |
| Tree Shaking | 兼顾 Rollup 语义与高性能实现 | 长期以精细 Tree Shaking 和输出质量见长 |
| 稳定与兼容 | 1.x 稳定线,部分低层 API 仍持续演进 | 历史更久、边缘行为和插件生态更成熟 |
| 更适合 | Vite、超大模块图和希望统一转换/打包的团队 | 追求最大插件兼容性和稳定库输出的项目 |
如果现有 Rollup 配置稳定、构建时间可接受,并依赖复杂 Plugin Hook,继续使用 Rollup 风险更低;如果大型模块图构建明显缓慢、希望复用 Vite 生态并减少基础转换插件,可以试点 Rolldown。应用优先通过 Vite 使用,常规 TypeScript 库优先评估 tsdown,低层直用则必须对比测试、Chunk、Source Map 和发布产物。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 Rolldown 官方介绍、入门、CLI、Bundler API、Plugin API 和故障排查文档,以及 npm Registry 与官方源码仓库整理。Rolldown 与 Vite 演进紧密,部分独立 API 和 Plugin 兼容细节更新较快,采用前应再次核对对应版本文档。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 29 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。