画个重点 开发应用时使用 Webpack,开发库时使用 Rollup
Rollup
https://www.rollupjs.com/
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序
通过 rollup 打包后的代码,相比与 webpack 打出来的包体积会更小,而且代码会更加简洁,不会有过多的冗余代码。
rollup 也对 es 模块输出及 iife 格式打包有很好的支持
Tree Shaking: 自动移除未使用的代码, 输出更小的文件
Scope Hoisting: 所有模块构建在一个函数内, 执行效率更高
Config 文件支持通过 ESM 模块格式书写
可以一次输出多种格式:
- 不用的模块规范: IIFE, AMD, CJS, UMD, ESM
- Development 与 production 版本:
.js
,.min.js
文档精简
构建UMD
1 | import typescript from 'rollup-plugin-typescript2'; |
babel 编译
1 | npm i -D @babel/core @babel/plugin-transform-runtime @babel/preset-env @rollup/plugin-babel @babel/preset-typescript |
1 | //.babelrc |
压缩
1 | // sh |
打包库常用
1 | import resolve from 'rollup-plugin-node-resolve' // 告诉 Rollup 如何查找外部模块 |
基础插件
- rollup-plugin-alias: 提供 modules 名称的 alias 和 reslove 功能.
- rollup-plugin-babel: 提供 Babel 能力, 需要安装和配置 Babel (这部分知识不在本文涉及)
- rollup-plugin-eslint: 提供 ESLint 能力, 需要安装和配置 ESLint (这部分知识不在本文涉及)
- rollup-plugin-node-resolve: 解析 node_modules 中的模块
- rollup-plugin-commonjs: 转换 CJS -> ESM, 通常配合上面一个插件使用
- rollup-plugin-replace: 类比 Webpack 的 DefinePlugin , 可在源码中通过
process.env.NODE_ENV
用于构建区分 Development 与 Production 环境. - rollup-plugin-filesize: 显示 bundle 文件大小
- rollup-plugin-uglify: 压缩 bundle 文件
- rollup-plugin-serve: 类比 webpack-dev-server, 提供静态服务器能力