Rollup

Rollup 简介与快速上手

了解 Rollup 是什么、为什么它适合打包 JavaScript 库,并完成第一个打包示例。

🎯 引言

学完这篇文章,你将明白 Rollup 是什么、它和 Webpack 有什么区别,以及为什么开发 JavaScript 库时大家更爱用它。我们还会一起安装 Rollup,并用一行命令完成第一次打包。


🧱 什么是 Rollup

Rollup 是一个 JavaScript 模块打包工具。它可以把分散在多个文件里的 ES 模块代码,合并成一个(或几个)可以直接运行的文件。

比如你写了两个文件:

src/math.js
export function add(a, b) {
    return a + b;
}
src/index.js
import { add } from './math.js';

console.log(add(1, 2));

Rollup 会把它们合并成一个文件,浏览器或 Node.js 拿到就能直接用,不需要关心内部拆了几个模块。

你可以把 Rollup 理解成一台装订机:你写了一叠零散的稿纸(模块文件),它帮你按顺序装订成一本书(打包产物),还把没用的空白页(未使用的代码)撕掉。


⚡ Rollup 和 Webpack 有什么区别

我们已经学过 Webpack,那为什么还需要 Rollup?简单对比一下:

对比项WebpackRollup
定位打包应用(App)打包(Library)
产物体积会注入运行时代码,略大非常干净,几乎没有多余代码
Tree Shaking支持最早提出,效果更彻底
配置复杂度功能多,配置相对复杂配置简单,上手快

一句话总结:做网站应用用 Webpack 或 Vite,写工具库、组件库用 Rollup

事实上,Vue、React 这些知名框架的源码,都是用 Rollup 打包的;Vite 的生产构建底层也是 Rollup。

Rollup 并不是要取代 Webpack,它们擅长的场景不同。本课程只讲 Rollup 的核心用法,Webpack 已讲过的概念(如入口、输出)不再重复。

🚀 安装 Rollup

本课程环境使用 Node.js v22.0.0,对应的 Rollup 版本为 4.62.2

新建一个练习项目并安装:

mkdir rollup-demo
cd rollup-demo
npm init -y
npm install rollup@4.62.2 --save-dev

安装完成后,可以用 npx rollup 调用它:

npx rollup --version

能打印出版本号,说明安装成功了。


📦 第一个打包示例

下面用最简单的方式体验一次完整的打包过程。

1. 准备源码

在项目里新建两个文件:

src/math.js
export function add(a, b) {
    return a + b;
}

export function subtract(a, b) {
    return a - b;
}
src/index.js
import { add } from './math.js';

console.log(add(1, 2));

export { add };

2. 执行打包

直接通过命令行指定入口和输出文件:

npx rollup src/index.js --file dist/bundle.js

看到 created dist/bundle.js 的提示,说明打包成功。

3. 查看产物

打开 dist/bundle.js,内容大致如下:

dist/bundle.js
function add(a, b) {
    return a + b;
}

console.log(add(1, 2));

export { add };

仔细观察你会发现两个有意思的点:

  • add 函数被完整地合并了进来,import 语句消失了。
  • subtract 函数不见了,因为代码里没有用到它,Rollup 自动把它“摇”掉了。

第二点就是 Rollup 最著名的 Tree Shaking 能力,我们会在后面的章节专门讲解。


🧾 小节总结

  • Rollup 是一个 JavaScript 模块打包工具,产物干净,特别适合打包工具库、组件库。
  • 做应用优先选 Webpack / Vite,写库优先选 Rollup,两者场景不同。
  • 本课程使用 Node.js v22.0.0 和 Rollup 4.62.2。
  • 命令行打包:npx rollup 入口文件 --file 输出文件
  • Rollup 默认会做 Tree Shaking,自动移除未使用的代码。

❓ 知识问答

Q1:Rollup 能打包 CSS、图片吗?

A:Rollup 核心只认识 JavaScript 模块,处理 CSS、图片需要借助插件。不过写库时一般很少涉及这些资源,这正是 Rollup 保持简单的原因。

Q2:npx rollup 里的 npx 是什么?

A:npx 是 npm 自带的命令,可以直接运行项目 node_modules 里安装的工具,不用写完整路径。

Q3:Rollup 打包后的文件能直接在浏览器里用吗?

A:默认输出的是 ES 模块格式,现代浏览器可以通过 <script type="module"> 使用。如果要在更老的环境使用,需要输出其他格式,下一章会详细介绍。

Q4:Vue 真的是用 Rollup 打包的吗?

A:是的。Vue、React、D3 等知名开源库都使用 Rollup 构建发布产物,Vite 的生产打包也基于 Rollup。


🧪 小练习

请完成以下步骤,体验 Rollup 的第一次打包:

  1. 新建 rollup-demo 项目,安装 rollup@4.62.2
  2. src/utils.js 中编写并导出两个函数:capitalize(首字母大写)和 truncate(截断字符串)。
  3. src/index.js 中只使用 capitalize,然后执行打包命令。
  4. 打开产物文件,确认 truncate 是否被移除。
# 请在这里执行命令

🎉 恭喜你已经完成了 Rollup 的入门!下一篇我们会学习用配置文件管理打包选项,告别冗长的命令行参数。