Rollup入门教程

102 阅读2分钟

rollup.js 一个js打包工具。

一、简介

打包工具将多个 JavaScript 脚本合并成一个脚本,供浏览器使用。

浏览器需要脚本打包,主要原因有三个。

(1)早期的浏览器不支持模块,大型网页项目只能先合并成单一脚本再执行。

(2)Node.js 的模块机制与浏览器不兼容,必须通过打包工具进行兼容处理。

(Node.js模块 -->CommonJS)(浏览器 --> ECMAScript)

(3)浏览器加载一个大脚本,要比加载多个小脚本,性能更好。

目前,最常用的打包工具是 Webpack。它的功能强大,但是难学难用,一直被人诟病。

rollup.js 主要用于打包 ES 模块。虽然commonjs也可以但是不建议,配置复杂,不比使用weebpack简单了。

二、使用

简单使用:

// add.js
const PI = 3.14;
const E = 2.718;

export function addPi(x) {
  return x + PI;
}

export function addE(x) {
  return x + E; 
}
// main.js
import { addPi } from './add.js';

console.log(addPi(10));
//在命令行输入,进行打包📦
rollup main.js

打包输出👇

image.png

importexport,被换成了原始代码。函数addE()没有打包进去,因为没有用到它。这种特性叫做摇树(tree-shaking),即打包时自动删除没有用到的代码。

使用参数--file [FILENAME],将打包结果保存到指定文件。

$ rollup main.js --file bundle.js

上面命令将打包结果保存到 bundle.js。

三、命令参数

(1)多个入口脚本,则依次填写它们的文件名,并使用参数--dir指定输出目录。


$ rollup m1.js m2.js --dir dist

上面命令会在目录dist,打包生成多个文件:m1.js、m2.js、以及它们共同的依赖项(如果有的话)。

(2)参数--format iife,会把打包结果放在一个自动执行函数里面。(不会被污染)

$ rollup main.js --format iife

(3)如果希望打包后代码最小化,使用参数--compact

$ rollup main.js --compact

另一种方法是使用专门工具。

$ rollup main.js | uglifyjs --output bundle.js

上面命令分成两步,第一步是 rollup 打包,第二步是 uglifyjs 进行代码最小化,最后写入 bundle.js。

(4)rollup 支持使用配置文件(rollup.config.js),把参数都写在里面,下面是一个例子。

// rollup.config.js
export default {
  input: 'main.js',
  output: {
    file: 'bundle.js',
    format: 'es'
  }
};

参数-c启用配置文件。

$ rollup -c

我不推荐使用配置文件,这样会增加额外的复杂性。默认场景下,命令行参数已经够用了,也更容易阅读。

五、转成 CommonJS 模块

最后,rollup 还支持 ES 模块转成 CommonJS 模块,使用参数--format cjs就可以了。


$ rollup add.js --format cjs

转换后的 CommonJS 模块,代码如下。

'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const PI = 3.14;
const E = 2.718;

function addPi(x) {
  return x + PI;
}

function addE(x) {
  return x + E; 
}

exports.addE = addE;
exports.addPi = addPi;