提高webpack的构建速度
大约 2 分钟
提高webpack构建速度的方法
1. 优化Loader配置
减少Loader处理范围
module.exports = {
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
// 只处理src目录下的文件
include: path.resolve(__dirname, 'src'),
// 排除node_modules目录
exclude: /node_modules/
}
]
}
}缓存Loader结果
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader?cacheDirectory'
}
]
}
}2. 使用DLL插件预编译依赖
将不常变动的第三方库预先打包:
// webpack.dll.js
const webpack = require('webpack');
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.resolve(__dirname, 'dll/[name]-manifest.json')
})
]
}3. 启用缓存机制
使用cache-loader
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: [
'cache-loader',
'babel-loader'
],
include: path.resolve('src')
}
]
}
}启用持久化缓存(webpack 5)
module.exports = {
cache: {
type: 'filesystem'
}
}4. 多进程并行处理
使用thread-loader
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: [
'thread-loader',
'babel-loader'
]
}
]
}
}5. 代码分割和懒加载
// 动态导入实现代码分割
const module = await import('./heavy-module.js');
// React中使用懒加载
const LazyComponent = React.lazy(() => import('./LazyComponent'));6. 优化resolve配置
module.exports = {
resolve: {
// 减少文件系统调用
modules: [path.resolve(__dirname, 'src'), 'node_modules'],
// 明确指定扩展名顺序
extensions: ['.js', '.jsx', '.json'],
// 避免层层查找
alias: {
'@': path.resolve(__dirname, 'src')
},
// 直接指定入口文件
mainFields: ['main']
}
}7. 合理使用externals
排除不需要打包的依赖:
module.exports = {
externals: {
'react': 'React',
'react-dom': 'ReactDOM'
}
}8. 开发环境优化
使用webpack-dev-server
module.exports = {
mode: 'development',
devtool: 'eval-cheap-module-source-map'
}启用热更新
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.HotModuleReplacementPlugin()
],
devServer: {
hot: true
}
}9. 生产环境优化
module.exports = {
mode: 'production',
optimization: {
// 启用作用域提升
concatenateModules: true,
// 启用tree shaking
usedExports: true,
sideEffects: false
}
}10. 使用更快的插件替代方案
- 使用
speed-measure-webpack-plugin分析构建时间 - 使用
hard-source-webpack-plugin提供中间缓存 - 考虑升级到 webpack 5 获得更好的性能
通过合理组合这些优化策略,可以显著提升 webpack 的构建速度。建议根据项目实际情况选择合适的优化方案。