rollup 是一个 JavaScript 模块打包器,能够将小块代码编译成大块复杂的代码,其源码中模块的导入导出采用的是ES6模块语法,即源码须要采用ES6语法进行编写。javascript
rollup与webpack的对比:java
要使用rollup,须要在全局进行安装,如:node
// 全局安装rollup > sudo npm install --global rollup
rollup安装完成后,就能够经过rollup命令进行打包了:webpack
① rollup 模块入口文件:es6
// 进入项目根目录下,并以src目录下的index.js做为模块入口进行打包 > rollup ./src/index.js
此时能够看到直接在控制台中输出了模块打包结果,由于没有指定将打包结果输出到哪一个文件下,因此会直接输出打包结果到控制台中。web
② 指定模块输出, --filenpm
// 将打包结果输出到当前目录下的bundle.js文件中 > rollup ./src/index.js --file bundle.js
③ 指定打包后的模块输出格式,--formatbabel
// 将模块打包成iife格式,即将模块放到匿名自执行函数中执行 > rollup ./src/index.js --file bundle.js --format iife
若是没有指定format,那么默认会输出为es格式。rollup支持的模块输出格式为: es、cjs、amd、umd、iife、system。其中cjs就是CommonJS模块规范。函数
④ 指定打包后模块的输出结果接收变量,--name
即指定一个变量用于接收打包后的模块输出结果ui
// 用result变量来接收模块的输出结果 > rollup ./src/index.js --file bundle.js --format iife --name result
输出结果以下:
var result = (function () { 'use strict'; const foo = "foo"; return foo; }());
⑤ 源码中模块的导入导出必须使用es6模块语法
若是源码中模块的导入导出采用的是CommonJS模块语法,那么打包后仍然会包含require,如:
// foo.js const foo = "foo"; module.exports = foo;
// index.js const foo = require("./foo"); console.log(foo); module.exports = foo;
> rollup ./src/index.js --file bundle.js --format cjs
打包后的输出结果中仍然包含require语法
'use strict'; const foo = require("./foo"); console.log(foo); module.exports = foo;
从打包结果能够看到,源码中的require语句原封不动输出到了bundle.js中,因为bundle.js的路径不固定,故require("./foo")执行可能由于找不到模块而失败。
要使用配置文件进行打包,须要带上-c参数,后面接配置文件便可,配置文件默认位置在项目根目录下,默认文件名为rollup.config.js。
① 在项目根目录下新建一个rollup.config.js文件
// rollup.config.js export default { input: "src/index.js", // 指定模块入口 output: { file: "bundle.js", // 指定模块输出文件路径 format: "cjs" // 指定模块输出格式 } }
② 经过rollup -c 加载配置文件进行打包
// 使用项目根目录下的rollup.config.js配置文件进行打包 > rollup -c
rollup也支持咱们使用一些插件来为打包提供更大的灵活性。
① 使用babel插件编译咱们的js文件
// 首先安装rollup-plugin-babel插件 > npm install rollup-plugin-babel --save-dev
② 在配置文件中引入babel插件
import bable from "rollup-plugin-babel"; // 引入babel插件 export default { input: "src/index.js", output: { file: "bundle.js", format: "cjs" }, plugins: [ bable({ // 添加babel插件 exclude: "node_modules/**" // 排除node_modules下的文件 }) ] }
③ 添加.babelrc文件
// 安装babel预设 > npm install @babel/preset-env --save-dev
即用@babel/preset-env模块中定义的预设进行处理,因此须要安装@babel/preset-env模块
{ "presets": [ "@babel/preset-env" // 添加安装好的预设 ] }
此时再打包,源码中的es6语法就能被转换为es5了。