1、目标
- 打包 js 库
- 需要打包压缩版和非压缩版本
- 持 AMD/CJS/ESM 模块引
2、使用方式
ES module
import * as largeNumber from 'large-number';
// ...
largeNumber.add('999', '1');
CJS
const largeNumbers = require('large-number');
// ...
largeNumber.add('999', '1');
AMD
require(['large-number'], function (large-number) {
// ...
largeNumber.add('999', '1');
});
直接 script
<!doctype html>
<html>
...
<script src="https://unpkg.com/large-number"></script>
<script>
// ...
// Global variable
largeNumber.add('999', '1');
// Property in the window object
window. largeNumber.add('999', '1');
// ...
</script>
</html>
3、配置
module.exports = {
mode: "production",
entry: {
"large-number": "./src/index.js",
"large-number.min": "./src/index.js"
},
output: {
filename: "[name].js",
library: "largeNumber",
libraryExport: "default",
libraryTarget: "umd"
}
};
library: 指定库的全局变量
libraryTarget: 支持库引入方式
4、压缩
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
include: /\.min\.js$/,
}),
],
}
5、设置package.json
package.json 的 main 字段为 index.js
if (process.env.NODE_ENV === "production") {
module.exports = require("./dist/large-number.min.js");
} else {
module.exports = require("./dist/large-number.js");
}