特色介绍
- Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码
- 支持ES6
- 支持Tree Shaking
- 可打包js库,也可管理App code
- 代码拆分和运行时态的动态导入,存在不足,推荐webpack
- 通过插件CommonJS 和 node-resolve ,支持将Commonjs 转为 ES模块
- 支持Typescript
使用
前提node已安装
node安装与卸载
rollup安装
npm install --global rollup
npm install rollup --save-dev
npx rollup -c
"scripts": {
"build:dev" :" rollup -c"
},
调用方式
打包方式
$ rollup main.js --file bundle.js --format iife
$ rollup main.js --file bundle.js --format cjs
$ rollup main.js --file bundle.js --format umd --name "myBundle"
CI
输出到文件bundle.js
import foo from './foo'
export default function(){
console.log(foo);
}
export default 'hello rollup'
$ rollup main.js -o bundle.js -f cjs
添加配置文件控制打包
export default {
input: 'main.js',
output: {
file: 'bundle.js',
format: 'cjs'
}
};
rollup -c
rollup -c rollup.config.dev.js
rollup -c rollup.config.prod.js
rollup -c -o bundle-2.js -f iife
'use strict';
var foo = 'hello rollup';
function main(){
console.log(foo);
}
module.exports = main;
使用插件修改打包
$ npm install --save-dev rollup-plugin-json
// rollup.config.js
import json from 'rollup-plugin-json';
export default {
input: 'src/main.js',
output: {
file: 'bundle.js',
format: 'cjs'
},
plugins: [ json() ]
};
// src/main.js
import { version } from '../package.json';
import foo from './foo'
export default function () {
console.log('version ' + version);
}
'use strict';
var version = "1.0.0";
function main(){
console.log('version ' + version);
}
module.exports = main;
- 通过两次运行结果,可发现,只有使用到的代码,被打包--Tree Shaking
rollup.config.js配置
配置项列表
// rollup.config.js
export default { // can be an array (for multiple inputs)
// core input options
external,
input, // required
plugins,
// advanced input options
cache,
inlineDynamicImports,
manualChunks,
onwarn,
preserveModules,
strictDeprecations,
// danger zone
acorn,
acornInjectPlugins,
context,
moduleContext,
preserveSymlinks,
shimMissingExports,
treeshake,
// experimental
experimentalCacheExpiry,
perf,
output: { // required (can be an array, for multiple outputs)
// core output options
dir,
file,
format, // required
globals,
name,
plugins,
// advanced output options
assetFileNames,
banner,
chunkFileNames,
compact,
entryFileNames,
extend,
footer,
hoistTransitiveImports,
interop,
intro,
outro,
paths,
sourcemap,
sourcemapExcludeSources,
sourcemapFile,
sourcemapPathTransform,
// danger zone
amd,
esModule,
exports,
externalLiveBindings,
freeze,
indent,
namespaceToStringTag,
noConflict,
preferConst,
strict
},
watch: {
chokidar,
clearScreen,
skipWrite,
exclude,
include
}
};