Rollup 因精准 tree-shaking、多格式输出(ESM/CJS/IIFE/UMD)、零运行时开销、简洁插件生态,成为 JavaScript 库构建首选工具。

Rollup 在 JavaScript 库开发中被广泛采用,核心优势在于它专为构建“面向发布的模块化代码”而设计,天然契合库的轻量、可复用、无冗余诉求。
Tree-shaking 更精准,产出更小的包体积
Rollup 默认基于 ES 模块静态结构进行分析,能准确识别未使用的导出(export)和未调用的函数/变量,在打包时彻底移除。相比 Webpack 这类为应用优化的打包器,Rollup 对库场景下的死代码消除更激进、更可靠。例如:一个工具库中只导入了 debounce,Rollup 能确保 throttle、curry 等其他导出完全不进入最终 bundle。
输出格式灵活,天然支持多模块标准
通过插件(如 @rollup/plugin-node-resolve、@rollup/plugin-commonjs)和配置,Rollup 可同时生成多种格式:
- ESM(.mjs):供现代 bundler(Vite、Webpack 5+)原生消费,支持进一步 tree-shaking
- CJS(.cjs):兼容 Node.js require 场景
- IIFE / UMD:支持浏览器直接 script 标签引入,自动挂载到全局变量或 AMD/UMD 环境
这种“一套源码、多端交付”的能力,让库作者无需维护多套构建逻辑。
无运行时开销,不注入额外 wrapper 代码
Rollup 默认不添加模块加载 runtime(如 Webpack 的 __webpack_require__),生成的代码接近手写模块结构。对于小型工具库(如 date-fns 的单函数导入),这意味着零额外字节——导出即使用,导入即执行。开发者可完全控制命名空间、导出方式(命名导出 / 默认导出 / 混合导出),避免因打包器介入导致的意外包裹或 this 绑定问题。
插件生态专注、配置简洁,聚焦库构建本质
Rollup 插件设计原则是“单一职责”,例如:
- rollup-plugin-terser 负责压缩
- @rollup/plugin-typescript 处理类型转译(不参与类型检查)
- rollup-plugin-dts 单独生成声明文件
配置通常只需 20–50 行,没有 loader、resolve、optimization 等多层抽象。对库作者而言,构建配置即文档,易读、易维护、易调试。










