Rollup是一款小巧的ES Module打包模块,相对于webpack来说,更纯粹,更易用。

起步
安装基本模块:
1 | npm install rollup --save-d |
rollup有六种打包模式,常用的三种为:
在浏览器中使用则使用iife模式打包,代码会以立即执行函数的方式进行打包:
1 | rollup ./src/entry.js --file ./dist/bundle.iife.js --format iife |
而在Node中使用,我们就使用commonjs模块打包方式:
1 | rollup ./src/entry.js --file ./dist/bundle.cjs.js --format cjs |
如果你希望在浏览器和Node中使用,就是用兼容模式,使用UMD模式打包:
1 | rollup ./src/entry.js --file ./dist/bundle.umd.js --format umd |
单文件的打包很简单,我们选择一个入口文件,再导出一个输出文件即可。
配置文件
为了使用起来更便捷,我们推荐使用配置文件的方式进行模块打包,这样,我们还能使用一些高级特性(比如打包多个输出和使用插件),新建一个rollup.config.js文件,通常放置到项目根目录。
仔细查阅这个包办大量选项的清单,你可以根据你自己的需要把它配置到你的配置文件中:
1 | // rollup.config.js |
两个必须的选择选项:输入
inpout和输出output。
如果你想使用Rollup的配置文件,记得在命令行里加上--config或者-c。
核心配置
rollup.config.js
1 | const resolve = require('rollup-plugin-node-resolve') |
输入
- 字符串,打包模块的入口文件路径。
- 数组字符串,多个打包入口时使用。
- Object,类似webpack那样,也是多入口的打包模式使用。
输出
file:输出文件路径dir:如果是多入口打包,则指定输出目录即可。format:打包的模式,目前有amd | cjs | esm | iife | umd | system可选值。name:代表你的iife/umd包,同一页上的其他脚本可以访问它。globals:Object形式的id: name键值对,用于umd/iife包。一般用于告诉Rollup某个引入的模块是某个指定的全局变量,比如导入juqery时,会默认使用$进行替换,而不会加载jquery源码(事实上,rollup本身不支持打包导入的第三方模块)。
插件
类似webpack的插件那样,比如rollup本身不支持导入npm模块(第三方模块),例如jquery,如果你希望打包的bundle中包含这些npm模块,就需要借助一个插件:rollup-plugin-node-resolve。
类似的,Rollup也不支持导入CommonJs模块,即node中使用的模块语法,同样,我们使用rollup-plugin-commonjs这个插件就可以了。
外链
标记某些模块是全局模块,一般搭配globals搭配使用。
高级配置
1 | const resolve = require('rollup-plugin-node-resolve') |
路径paths
Function,它获取一个ID并返回一个路径,或者id:path对的Object。在提供的位置,这些路径将被用于生成的包而不是模块ID,从而允许您(例如)从CDN加载依赖关系。
banner/footer
String 字符串以 前置/追加 到文件束(bundle)。(注意:“banner”和“footer”选项不会破坏sourcemaps)
1 | // rollup.config.js |
intro/outro
String类似于 banner和footer,除了代码在内部任何特定格式的包装器(wrapper)。
1 | export default { |
onwarn
Function 将拦截警告信息。如果没有提供,警告将被复制并打印到控制台。
警告是至少有一个code 和 message属性的对象,这意味着您可以控制如何处理不同类型的警告:
sourcemap
如果 true,将创建一个单独的sourcemap文件。如果 inline,sourcemap将作为数据URI附加到生成的output文件中。
额外配置
watch模式
这些选项仅在运行 Rollup 时使用 --watch 标志或使用 rollup.watch 时生效。
1 | // rollup.config.js |