Vendor和DLL都是Webpack中用于优化构建性能的技术,但它们的实现方式和适用场景有所不同:
特性 | Vendor Chunk | DLL Plugin |
---|---|---|
原理 | 将第三方库打包到单独chunk | 预编译第三方库为独立bundle |
构建速度 | 每次构建都需处理 | 仅首次需要完整构建 |
缓存利用 | 依赖contenthash | 可长期缓存 |
配置复杂度 | 简单 | 中等 |
适用场景 | 中小项目 | 大型项目 |
// webpack.config.js
module.exports = {
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all',
},
},
},
},
};
// webpack.dll.config.js
module.exports = {
entry: {
vendor: ['react', 'react-dom', 'lodash'],
},
output: {
filename: '[name].dll.js',
path: path.resolve(__dirname, 'dll'),
library: '[name]_[hash]',
},
plugins: [
new webpack.DllPlugin({
name: '[name]_[hash]',
path: path.join(__dirname, 'dll', '[name]-manifest.json'),
}),
],
};
// webpack.config.js
plugins: [
new webpack.DllReferencePlugin({
manifest: require('./dll/vendor-manifest.json'),
}),
]
对于Webpack 5+项目,还可以考虑: 1. HardSourceWebpackPlugin:提供中间缓存 2. Cache-loader:模块级缓存 3. 持久化缓存:Webpack 5内置功能
// Webpack 5 持久化缓存
module.exports = {
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename],
},
},
};
对于大多数现代项目,Vendor Chunk方案通常足够且更简单。只有在大型项目且构建性能成为瓶颈时,才值得考虑DLL方案。Webpack 5的持久化缓存功能进一步缩小了DLL的优势范围。