Jacleklm's Blog

webpack之Code Splitting

2019/09/26

应用场景

当我们的业务逻辑很大的时候(index.js很大),我们打包生成的文件会很大:用户打开页面要一次性加载这个很大的文件,需要很长的加载时间;当文件有一点点修改,用户又要重新加载这个很大的文件,又需要很长加载时间。所以可以用code splitting(代码分割)把代码分离到不同的 bundle 中,可以实现按需加载或并行加载这些文件,优化加载时间。

实现

借用SplitChunksPlugin,可以实现对同步加载的代码或者异步加载的代码实现代码分割。把spliChunk写在webpack配置文件的optimization配置项中。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
optimization: {
splitChunks: {
chunks: "async",
minSize: 30000,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: false,
default: false
}
}
}

SplitChunksPlugin配置项详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
splitChunks: {
chunks: "async", // 做代码分割的时候只对异步代码生效,也可以是initial(同步)或all
minSize: 30000, // 引入的库大于这个字节才会做代码分割
minChunks: 1, // 当一个模块至少被用了x次的时候,就对它进行代码分割
maxAsyncRequests: 5, // 最多只能对x个库进行代码分割,大于这个数,后面的库就不进行代码分割了
maxInitialRequests: 3, // 入口文件引入的库/js文件最多只能是这个数才都进行代码分割
automaticNameDelimiter: '~', // 文件名连接符
name: true,
cacheGroups: { // 对同步的代码分割才会走这个配置项
vendors: false, // 异步的时候用false,同步的时候可用官方文档默认配置;
// 符合这个方案的打包后文件名前缀是vender~,不符合则是走default方案,可用官方文档默认配置
default: false
}
}
CATALOG
  1. 1. 应用场景
  2. 2. 实现
  3. 3. SplitChunksPlugin配置项详解