rollup 学习笔记一

152 阅读2分钟

简介

概括

Rollup 是一个用于 JavaScript 的模块打包工具,它将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它使用JavaScript的ES6版本中包含的新标准化代码模块格式。

安装

npm install --global rollup

使用

可以通过带有可选配置文件的 命令行界面 或 JavaScript API 来使用 Rollup。

假定应用程序入口文件为main.js,并且希望将所有导入编译到一个名为bundle.js的单个文件中。

main.js示例:

console.log('我是main.js');

对于浏览器:

# 编译为包含自执行函数('iife')的 <script>。
rollup main.js --file bundle.js --format iife

打包后的bundle.js

(function () {
	'use strict';

	console.log('我是main.js');

})();

对于Node.js:

# 编译为一个 CommonJS 模块 ('cjs')
rollup main.js --file bundle.js --format cjs

打包后的bundle.js

'use strict';

console.log('我是main.js');

对于浏览器和Node.js:

# UMD 格式需要一个包名
rollup main.js --file bundle.js --format umd --name "common"

打包后的bundle.js

(function (factory) {
	typeof define === 'function' && define.amd ? define(factory) :
	factory();
})((function () { 'use strict';

	console.log('我是main.js');

}));

背景

ES6(模块化)仅在现代浏览器中实现,并未在Node.js中完全落地。Rollup允许你使用新的模块系统编写代码,然后将其编译回现有的格式,例如CommonJS模块、AMD模块和IIFE样式脚本。 参考:rollup.js中文网

优势

除屑优化(Tree-Shaking)

除了可以使用 ES 模块之外,Rollup 还可以静态分析你导入的代码,并将排除任何实际上没有使用的内容。这使你可以在现有的工具和模块的基础上构建,而不需要添加额外的依赖项或使项目的大小变得臃肿。

例如入口文件如下main.js

import * as util from './util'
// ‘啊啊啊’
util.log('aaa');

util.js如下:

function log (value) {
  return console.log('log: ', value)
}

function warn (value) {
  return console.warn('warn: ', value)
}

// module.exports = { log, warn }
// util:
export { log, warn }

对于浏览器打包的bundle.js:

(function () {
  'use strict';

  function log (value) {
    return console.log('log: ', value)
  }

  // ‘啊啊啊’
  log('aaa');

})();

对于Node.js打包的bundle.js:

'use strict';

function log (value) {
  return console.log('log: ', value)
}

// ‘啊啊啊’
log('aaa');

对于浏览器和Node.js打包的bundle.js:

(function (factory) {
  typeof define === 'function' && define.amd ? define(factory) :
  factory();
})((function () { 'use strict';

  function log (value) {
    return console.log('log: ', value)
  }

  // ‘啊啊啊’
  log('aaa');

}));

兼容性

导入CommonJS

Rollup 可以通过插件 导入现有的 CommonJS 模块

发布ES模块

为了确保你的 ES 模块可以立即被处理 CommonJS 的工具,例如 Node.js 和 webpack 使用,你可以使用 Rollup 编译成 UMD 或 CommonJS 格式,然后在 package.json 文件中使用 main 属性指向编译后的版本。如果你的 package.json 文件还有一个 module 字段,那么像 Rollup 和 webpack 2+ 这样的可感知 ES 模块的工具将直接 导入 ES 模块版本