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 的
