Code Splitting
- 将代码分离到不同的 bundle,按需加载
- 分离出更小的 bundle,控制资源加载优先级
入口起点
配置多入口
webpack.common.js
const commonConfig = {
entry: {
main: { import: "./src/main.js", dependOn: "shared" },
index: { import: "./src/index.js", dependOn: "shared" },
shared: ["lodash", "axios"], // 配置共享库
},
};
防止重复
内置SplitChunksPlugin
const commonConfig = {
optimization: {
splitChunks: {
chunks: "all", // async异步导入 initial同步导入
cacheGroups: {
venders: {
test: /xxx/,
filename: "xxx",
},
},
},
},
};
动态导入
代码运行过程中根据条件判断是否加载
import()
require.ensure
- chunkFilename
配置懒加载
- runtimeChunks
Magic Comments
- preload chunk 会在父 chunk 加载时,以并行方式开始加载。prefetch chunk 会在父 chunk 加载结束后开始加载。
- preload chunk 具有中等优先级,并立即下载。prefetch chunk 在浏览器闲置时下载。
- preload chunk 会在父 chunk 中立即请求,用于当下时刻。prefetch chunk 会用于未来的某个时刻。
CDN
publicPath
配置 CDN 路径externals
不需要打包
externals: {
// window._
lodash: "_",
// window.dayjs
dayjs: "dayjs"
},