# webpack 打包组件和基础库
# 需求
- 打包一个未压缩版和压缩版的库
- 计算大位数相加 (超过 16 位的数字)
# 如果将库暴露出去
- library 指定库的全局变量
- libraryTarget 支持库引入的方式
- var 暴露为一个变量
- this
- window
- global
- commonjs
# 编写代码逻辑
- 创建 src/index.js
export default function add(a, b) {
let i = a.length - 1
let j = b.length - 1
// 记录进位
let carry = 0
let res = ''
// 个位数+个位数 十位数 + 十位数
while(i >= 0 || j >= 0) {
let x = 0
let y = 0
let sum
if (i >= 0) {
// string 转成 number
x = a[i] - '0'
i --
}
if (j >= 0) {
y = b[j] - '0'
j --
}
// 每次求和必须要把进位加上
sum = x + y + carry
// 如果 sum >= 10 进位 = 1, sum - 10
if(sum >= 10) {
carry = 1
sum -= 10
} else {
carry = 0
}
res += sum
}
// 最后判断一下有没有进位
if (carry) {
res += carry
}
return res
}
console.log(add('1000000000000000000000000', '1'))
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
33
34
35
36
37
38
39
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
33
34
35
36
37
38
39
# 创建项目
- 初始化
npm init or npm init -y
1
- 安装 webpack webpack-cli
npm webpack webpack-cli -D
1
# 配置文件
- webapck.config.js
module.exports = {
entry: {
'large-number': './src/index.js',
'large-number.min': './src/index.js'
},
output: {
filename: '[name].js',
library: 'largeNumber',
libraryTarget: 'umd',
libraryExport: 'default'
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- 这样就打包出两个文件 都是压缩版
# 安装压缩插件
- 增加配置文件,.main 文件压缩
npm i terser-webpack-plugin -D
1
- 修改 webpack.config.js 文件
const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
entry: {
'large-number': './src/index.js',
'large-number.min': './src/index.js'
},
output: {
filename: '[name].js',
library: 'largeNumber',
libraryTarget: 'umd',
libraryExport: 'default'
},
mode: 'none',
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
include: /\.min\.js$/
})
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 根据环境设置不同入口文件
- 根据 package.json 的入口 编写入口文件 默认 main: index.js,修改为 main: "main.js" ,创建 main.js 文件
- 添加根据环境设置不同入口
// 通过环境变量来决定入口文件
if (process.env.NODE_ENV === 'production') {
module.exports = require('./dist/large-number.min.js')
} else {
module.exports = require('./dist/large-number.js')
}
1
2
3
4
5
6
2
3
4
5
6