webpack系统回顾学习————打包组件和基础库
webpack打包组件和基础库
webpack除了打包应用,也可以用来打包js库
一个示例: 实现一个大整数加法库的打包
要求:
- 需要打包压缩版本和非压缩版本
- 支持AMD/CJS/ESM模块引入
预想中实现目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17|-/dist
|- large-number.js
|- large-number-min.js
|- webapck.config.js
|- package.json
|- index.js
|- /src
|- index.js
支持的使用方式
- 支持ESM: import * as largeNumber from 'large-number'
- 支持CJS: const largeNumber = require('large-number')
- 支持AMD: require(['large-number'], function(large-number) {
...
})
largeNumber.add('999', '1')功能实现
思路:从最后一位累加,满10进位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33export default function add (a, b) {
let i = a.length - 1;
let j = b.length - 1;
let carry = 0; // 进位
let ret = '';
while(i >= 0 || j >= 0) {
let x = 0;
let y = 0;
let sum;
if(i > =0) {
x = a[i] - '0';
i--;
}
if(j > =0) {
y = b[j] - '0';
j--;
}
sum = x + y + carry;
if(sum >= 10) {
carry = 1;
sum -= 10;
} else {
carry = 0;
}
ret = sum + ret
}
if(carry) {
ret = carry + ret
}
return ret
}webpack打包
说明:production模式下会自动压缩,将mode设置成none,再单独将.min.js压缩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21module.exports = {
mode: 'none',
entry: {
'large-number': './src/index.js',
'large-number-min': './src/index.js'
},
output: {
filename: '[name].js',
library: 'largeNumber',// 指定库的全局变量
libraryTarget: 'umd',// 支持库引入的方式
libraryExport: 'default' // 库导出的方式
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
include: /\.min\.js$/
})
]
}
}设置入口文件
说明:package.json的main字段为index.js
1
2
3
4
5if (process.env.NODE_ENV === 'production') {
module.exports = require('./dist/large-number.min.js')
} else {
module.exports = require('./dist/large-number.js')
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 随心所欲录!
评论