Webpack打包优化2
处理 webpack 中不变的第三方包,最佳实现方案
DllPlugin & DllReferencePlugin 实现预编译,或使用 externals 配置从外部 CDN 加载,或在生产环境通过分包优化(SplitChunksPlugin)和按需加载减少主包体积,并配合 Tree Shaking 和 Scope Hoisting 减少无效代码。核心是分离这些稳定包,让它们独立打包或不打包进主应用,减少重复构建时间。
最佳策略详解
- DllPlugin & DllReferencePlugin (推荐)- 原理: 预先将大型不变的库(如 React, Vue, Lodash)打包成一个独立的 DLL (Dynamic Link Library) 文件。
- 好处: 构建时跳过对这些库的编译,大幅提升构建速度,尤其是在开发环境。
- 实现:-
webpack.config.js(基础配置):javascript
// dll.config.js (单独配置)
const webpack = require('webpack');
module.exports = {
entry: {
vendor: ['react', 'react-dom', 'lodash'] // 你的不变包
},
output: {
path: path.join(__dirname, 'dist', 'dll'),
filename: '[name].dll.js',
library: '[name]'
},
plugins: [
new webpack.DllPlugin({
path: path.join(__dirname, 'dist', 'dll', '[name]-manifest.json'),
name: '[name]'
})
]
};
- 主配置文件 (配置
DllReferencePlugin):javascript
// webpack.config.js (主配置)
new webpack.DllReferencePlugin({
context: __dirname,
manifest: require('./dist/dll/vendor-manifest.json')
})