1. 构建速度优化
缓存优化
module.exports = {
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename]
}
}
};
多线程构建
const threadLoader = require('thread-loader');
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: [
'thread-loader',
'babel-loader'
]
}
]
}
};
externals 外部依赖
module.exports = {
externals: {
'react': 'React',
'react-dom': 'ReactDOM'
}
};
2. 打包体积优化
Tree Shaking
module.exports = {
mode: 'production',
optimization: {
usedExports: true,
sideEffects: false
}
};
代码分割
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all',
}
}
}
}
};
动态导入
const module = await import('./heavy-module.js');
const Home = () => import('./Home.vue');
3. 资源优化
压缩优化
const TerserPlugin = require('terser-webpack-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
compress: {
drop_console: true
}
}
}),
new CssMinimizerPlugin()
]
}
};
图片优化
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif|svg)$/i,
use: [
{
loader: 'image-webpack-loader',
options: {
mozjpeg: { progressive: true },
optipng: { enabled: false },
pngquant: {
quality: [0.65, 0.90],
speed: 4
}
}
}
]
}
]
}
};
4. 解析优化
别名和扩展
module.exports = {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
'components': path.resolve(__dirname, 'src/components')
},
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
modules: [path.resolve(__dirname, 'src'), ...nodeModulesPaths]
}
};
精确匹配
module.exports = {
module: {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/,
use: 'babel-loader'
}
]
}
};
5. 开发环境优化
模块热替换 (HMR)
module.exports = {
devServer: {
hot: true,
client: {
overlay: false
}
},
plugins: [
new webpack.HotModuleReplacementPlugin()
]
};
Source Map 优化
module.exports = {
devtool: process.env.NODE_ENV === 'development'
? 'eval-source-map'
: 'source-map'
};
6. 分析和监控
Bundle 分析
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false
})
]
};
构建性能分析
module.exports = {
stats: {
preset: 'minimal',
timings: true,
errors: true,
warnings: true
}
};
7. 高级优化策略
预加载和预获取
const Login = () => import(
'./Login.vue'
);
预构建依赖
module.exports = {
experiments: {
lazyCompilation: true
}
};
DLL 插件(适用于大型项目)
module.exports = {
entry: {
vendor: ['react', 'react-dom']
},
plugins: [
new webpack.DllPlugin({
name: '[name]',
path: path.resolve(__dirname, 'dll/[name].manifest.json')
})
]
};