如何优化 Webpack 打包性能,减少打包时间和打包体积。
优化 Webpack 打包性能的常见方法:
升级 Webpack 和依赖
Webpack 5 支持持久化缓存,显著减少重复构建时间:
npm update webpack webpack-cli
缩小文件处理范围
在 loader
中通过 exclude/include
缩小匹配范围:
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/, // 排除 node_modules
use: 'babel-loader'
}]
}
多进程/多实例构建
使用 thread-loader
并行处理耗时的 Loader(如 Babel):
module: {
rules: [{
test: /\.js$/,
use: [
'thread-loader', // 多进程
'babel-loader'
]
}]
}
缓存加速二次构建
Webpack 5 内置持久化缓存,或使用 cache-loader
:
module.exports = {
cache: {
type: 'filesystem' // Webpack 5 内置缓存
}
};
代码分割(Code Splitting)
使用 SplitChunksPlugin
分离公共代码:
optimization: {
splitChunks: {
chunks: 'all', // 分离公共模块
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors'
}
}
}
}
mode: 'production'
),使用 ES6 模块语法,删除未引用代码。压缩代码
使用 TerserPlugin
压缩 JS,CssMinimizerPlugin
压缩 CSS:
optimization: {
minimize: true,
minimizer: [
new TerserPlugin(), // 压缩 JS
new CssMinimizerPlugin() // 压缩 CSS
]
}
按需加载
动态导入(Dynamic Import)分割代码:
import('./module').then(module => { ... });
分析工具
使用 webpack-bundle-analyzer
分析打包体积:
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
plugins: [new BundleAnalyzerPlugin()]
CDN 引入外部库
通过 externals
排除大型库(如 React):
externals: {
react: 'React',
'react-dom': 'ReactDOM'
}
图片压缩
使用 image-webpack-loader
压缩图片资源:
rules: [{
test: /\.(png|jpg|gif)$/,
use: [
'file-loader',
{ loader: 'image-webpack-loader', options: { mozjpeg: { quality: 50 } } }
]
}]
最终效果:
mode: 'production'
+ 代码压缩 + 持久化缓存。10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决