webpack 一般用作项目的打包;rollup 作为库的打包工具,不需要额外配置就可以实现tree-shaking,打包后代码更少。
- amd – 异步模块定义,用于像 RequireJS 这样的模块加载器
- cjs – CommonJS,适用于 Node 和 Browserify/Webpack
- es – 将软件包保存为 ES 模块文件
- iife – 一个自动执行的功能,适合作为
<script>
标签。(如果要为应用程序创建一个捆绑包,您可能想要使用它,因为它会使文件大小变小。) - umd – 通用模块定义,以 amd,cjs 和 iife 为一体
插件
rollup-plugin-resolve:集成外部模块代码;
rollup-plugin-commonjs:支持CommonJS模块;
rollup-plugin-babel:编译ES6+语法为ES2015;
rollup-plugin-json:支持json模块;
rollup-plugin-terser:代码压缩,取代uglify,支持ES模块;
rollup-plugin-vue
: 支持vue
rollup-plugin-scss:支持scss
配置rollup.config.js
import json from 'rollup-plugin-json'; export default { input: 'src/main.js', output: { file: 'bundle.js', format: 'cjs' }, plugins: [ json() ] };
vue 项目配置
import resolve from "@rollup/plugin-node-resolve"; import commonjs from "@rollup/plugin-commonjs"; import json from "@rollup/plugin-json"; import babel from "@rollup/plugin-babel"; import vue from "rollup-plugin-vue"; import scss from "rollup-plugin-scss"; import { terser } from "rollup-plugin-terser"; export default { input: "src/entry.js", output: { globals: { vue: "Vue", }, file: 'bundle.js', format: 'umd' }, plugins: [ vue(), resolve({ extensions: [".js", ".vue"], }), commonjs(), babel({ exclude: "node_modules/**", babelHelpers: "bundled", }), json(), terser(), ], external: ["vue"], };
Vue+iView 配置增加的部分
{ ... ... output: { globals: { vue: "Vue", iview: "iview", }, }, external: ["vue", "iview"], };
打包
rollup -c
注意事项
- 出现 bindings 不支持,default 不支持等情况
解决:babel 的各个版本要和 @babel/core 统一,stage 版本已经不再支持
- vue 不支持等错误
打的包是 Vue3 语法,应用是 Vue2 语法
解决:Vue 的版本、vue-template-compiler 和 rollup-plugin-vue 的版本要统一,支持 Vue2 就要都是支持 Vue2 的