代码拆分与公共模块提取方法
- 使用splitChunks插件:Webpack的
splitChunks
插件可以自动将公共模块拆分出来。
- 原理:
splitChunks
插件会分析所有入口chunk的依赖关系,找出重复的模块,并将其提取到单独的chunk中。这样在浏览器加载时,公共模块只需加载一次,不同入口对应的chunk可以复用已加载的公共模块,从而优化加载性能。
Webpack配置
const path = require('path');
module.exports = {
entry: {
home: './src/home.js',
about: './src/about.js',
contact: './src/contact.js'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].bundle.js'
},
optimization: {
splitChunks: {
chunks: 'all',
name: 'commons'
}
}
};
- entry:定义了三个入口文件,分别对应
home
、about
和contact
。
- output:指定输出路径为
dist
目录,并且输出文件名使用[name].bundle.js
的格式,[name]
会被替换为入口文件对应的名称。
- optimization.splitChunks:
- chunks:
'all'
表示对所有类型的chunk(包括异步chunk和初始chunk)都进行拆分。
- name:
'commons'
指定了公共模块拆分出来后的文件名前缀为commons
,Webpack会自动生成唯一的文件名,例如commons.js
。这样就会将所有入口文件中重复的模块,如lodash
,提取到commons.js
文件中,实现代码拆分和公共模块提取,优化打包体积和加载性能。