Rollup 是一个基于 ES 模块的 JavaScript 打包工具,由 Rich Harris 开发。它以输出干净、体积小的产物著称,是摇树优化(Tree Shaking)概念的早期实践者,被广泛用于打包 JavaScript 库,Vite 的生产构建也基于它。

| 类型 | 模块打包工具 |
| 作者 | Rich Harris |
| 首次发布 | 2015 年 |
| 模块规范 | ES 模块优先 |
| 许可证 | MIT |
Rollup 是一个开源的 JavaScript 模块打包器(bundler),由 Svelte 作者 Rich Harris 于 2015 年发布。它以 ES 模块(ESM)作为一等公民,静态分析模块间的导入导出关系,在打包时剔除未被使用的代码,最终生成结构扁平、接近手写风格的产物文件。
在 Rollup 出现之前,主流打包方案多以 CommonJS 为中心,产物中包含较多模块封装样板代码。Rollup 利用 ES 模块静态可分析的特性,率先将摇树优化推向实用化,并推动了这一术语的流行。它通过作用域提升(scope hoisting)把多个模块合并进同一作用域,减少函数包裹开销,因此产物体积小、运行开销低。Rollup 支持输出 ESM、CommonJS、UMD、IIFE 等多种格式,非常适合需要同时面向多种运行环境发布的类库。生态方面,它拥有丰富的插件体系,官方与社区插件覆盖代码转换、路径解析、压缩、类型声明生成等需求。知名构建工具 Vite 在开发阶段使用 esbuild 与原生 ESM,而生产构建阶段默认调用 Rollup 完成打包。
Rollup 最典型的用途是打包 JavaScript / TypeScript 库:Vue、React 生态中大量流行库都用它构建发布产物。它也可用于打包应用,但面对需要复杂资源处理与开发服务器的大型应用时,开发者通常直接选择基于它的 Vite。此外,Rollup 团队还推出了以 Rust 重写核心的 Rolldown 项目,用于进一步提升构建性能。
问:Rollup 和 Webpack 该怎么选?答:一般认为库打包首选 Rollup,产物更小更干净;复杂应用打包 Webpack 生态更全,而新项目也常用封装了 Rollup 的 Vite。
问:Rollup 和 Vite 是什么关系?答:Vite 是更高层的构建工具,开发环境走原生 ESM 与 esbuild,生产构建默认使用 Rollup,其插件机制也兼容 Rollup 插件。
问:摇树优化为什么依赖 ESM?答:ES 模块的导入导出在编译期即可静态确定,工具能可靠判断哪些导出未被使用;而 CommonJS 的 require 是动态调用,难以做同等精度的静态分析。

| 类型 | 模块打包工具 |
| 作者 | Rich Harris |
| 首次发布 | 2015 年 |
| 模块规范 | ES 模块优先 |
| 许可证 | MIT |
登录 后参与讨论
暂无讨论,来发表第一条评论吧