比Webpack更高效的Rollup入门指南
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
允许我们以ES6来进行库的开发,通常我们用Webpack来打包应用类的项目,而使用来打包库类型的项目,因为可以使我们的库更加简洁,毕竟人家的Slogan是:
快速上手
安装
npm install --global rollup
使用查看使用命令及相关参数。
基本使用命令:
rollup [options]
如打包一个支持Commonjs的文件:
rollup main.js --file bundle.js --format cjs
可以使用库来初始化项目
配置文件
// rollup.config.js
export default {
input: 'src/main.js',
output: {
file: 'bundle.js',
format: 'cjs'
}
};
上面是最基础的配置,指定打包入口和输出文件名称及类型
另外针对处理输入文件和处理输出文件都提供了相应的插件。
如官方实例:
import json from 'rollup-plugin-json';
export default {
input: 'src/main.js',
output: {
file: 'bundle.js',
format: 'cjs'
},
plugins: [ json() ]
}
另外我们也可以使用插件对输出文件进行处理,如使用对打包文件进行压缩:
yarn add -D rollup-plugin-terser
配置:
import { terser } from 'rollup-plugin-terser';
export default {
input: 'src/main.js',
output: [
{ file: 'bundle.js', format: 'cjs' },
{ file: 'bundle.min.js', format: 'iife', name: 'version', plugin: [terser()] }
]
}
另外,上面的配置文件默认一种打包配置,也可以指定多种打包配置,如:
export default [
// browser-friendly UMD build
{
input: 'src/index.ts',
output: {
name: 'test',
file: pkg.browser,
format: 'umd'
},
plugins: [
commonjs(), // so Rollup can convert `ms` to an ES module
typescript(), // so Rollup can convert TypeScript to js
]
},
{
input: 'src/index.ts',
plugins: [
typescript(), // so Rollup can convert TypeScript to js
],
output: [
{ file: pkg.main, format: 'cjs' },
{ file: pkg.module, format: 'es' }
]
}
];
搭配React + TypeScript
增加TypeScript支持
首先安装TS相关依赖:
yard add -D rollup-plugin-typescript ts-node tslib typescript
:
import typescript from 'rollup-plugin-typescript';
export default {
plugins: [ typescript() ]
}
搭配antd的babel-plugin-import使用
安装插件和
import babel from 'rollup-plugin-babel';
export default {
//plugins: [ babel() ]
plugins: [
babel({
exclude: 'node_modules/**',
extensions: ['.jsx', '.tsx', '.js', '.ts']
})
]
}
总体来说,上手还是比较方便的,第一次用来打包业务的通用模块,体验很好,后续会继续研究,毕竟业务中通用库都倡导使用来打包,以保证更小的包体积。