对于打包一个项目的整个应用的话,webpack
更适合,对于类库的打包,使用 Rollup
效率更高。
我们知道Babel
它能够帮助我们转译 JavaScript
新特性(ES6
/ES2015
等)到 ES5
版本,这也将支持目前所有的浏览器来正常运行代码。
rollup
的模块机制是ES6
模板,并不会对es6
其他的语法进行编译。因此如果要使用es6
的语法进行开发,还需要使用babel
来帮助我们将代码编译成es5
。对于这种需求,rollup
提供了解决方案rollup-plugin-babel
,该插件将rollup
和babel
进行了完美结合。
安装
npm install --save-dev rollup-plugin-babel
当然项目也安装Babel
npm install --save-dev
babel-core
babel-plugin-external-helpers
babel-plugin-transform-runtime
babel-preset-env
babel-preset-stage-2
babel-register
rollup-plugin-babel
用法
在rollup.config.js
中配置如下(配置文件可以根据自己求):
// rollup.config.js
import resolve from 'rollup-plugin-node-resolve';
import babel from 'rollup-plugin-babel';
export default {
input: 'src/main.js',
output: {
file: './dist/bundle.js',
format: 'cjs'
}
plugins: [
babel({
// babelrc: false,
exclude: 'node_modules/**' // only transpile our source code
})
]
};
同时在babel
的配置文件.babelrc
中配置如下:
{
"presets": [
["env", {
"modules": false
}]
],
"plugins": ["external-helpers"]
}
我们用到了babel
的一个功能集env
,和external-helpers
插件。babel
会按照env
和external-helpers
指定的功能去完成编译工作。
配置"modules": false
是因为rollup
会处理es6
模块语法,其余的es6
语法才由babel
处理。external-helpers
, 是为了避免在每个模块的头部重复引用相同的"helpers
"方法,只需要在构建完的bundle
头部引入一次就够了。