海贼王に俺はなる
原创 笔记 | JS pengchen 2019, March 30
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
<!--全局安装-->
$ npm install rollup --global
lib.js
export function funA() {
console.log('fun A');
}
index.js
import { funA } from './lib';
funA();
对于浏览器:
$ rollup index.js --file bundle.js --format iife
打出来的文件bundle.js
(function () {
'use strict';
function funA() {
console.log('fun A');
}
funA();
}());
对于Node.js:
$ rollup index.js --file bundle.js --format cjs
打出来的文件bundle.js
'use strict';
function funA() {
console.log('fun A');
}
funA();
对于浏览器和Node.js:
$ rollup index.js --file bundle.js --format umd
打出来的文件bundle.js
(function (factory) {
typeof define === 'function' && define.amd ? define(factory) :
factory();
}(function () { 'use strict';
function funA() {
console.log('fun A');
}
funA();
}));
每次使用上面的命令行,当参数多了,还是有点麻烦的,所以我们创建一个配置文件来包含所需要的选项。
3.1 新建rollup.config.js配置文件
export default {
input: 'index.js',
output: {
file: 'bundle.js',
format: 'iife'
}
};
3.2 执行命令打包
$ rollup -c
当然,你也可以使用命令行去覆盖配置文件。
$ rollup -c --file bundle_new.js
我们以rollup-plugin-json
为例,让rollup读取json文件数据。
npm install rollup-plugin-json --save-dev
index.js
import { version } from './package.json';
export default function () {
console.log('version ' + version);
}
rollup.config.js
import json from 'rollup-plugin-json';
export default {
input: 'index.js',
output: {
file: 'bundle.js',
format: 'cjs'
},
plugins: [ json() ]
};
执行命令,打出来的文件bundle.js
'use strict';
var version = "1.0.0";
function getVersion() {
console.log('version ' + version);
}
module.exports = getVersion;
const rollup = require('rollup');
const inputOptions = {
input: "index.js"
};
const outputOptions = {
file: 'bundle_api.js',
format: 'cjs'
};
async function build() {
// create a bundle
const bundle = await rollup.rollup(inputOptions);
// generate code and a sourcemap
// const { code, map } = await bundle.generate(outputOptions);
// or write the bundle to disk
await bundle.write(outputOptions);
}
build();
感谢您的阅读