module.exports = {
module: {
rules: [
{
test: /\.js$/,
include: path.resolve('src'),
use: [
{
loader: 'thread-loader',
options: {
workers: require('os').cpus().length - 1,
workerParallelJobs: 50,
poolTimeout: 2000
}
},
'babel-loader'
]
}
]
}
}
const HappyPack = require('happypack');
const happyThreadPool = HappyPack.ThreadPool({ size: 5 });
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: 'happypack/loader?id=js',
include: [path.resolve('./src')]
}
]
},
plugins: [
new HappyPack({
id: 'js',
threadPool: happyThreadPool,
loaders: ['babel-loader']
})
]
}
// 使用import()语法
const Home = () => import(/* webpackChunkName: "home" */ './views/Home.vue');
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
minSize: 30000,
maxSize: 0,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
}
}
}
module.exports = {
optimization: {
runtimeChunk: {
name: 'runtime'
}
}
}
// 使用这种方式导出
export const func1 = () => {...}
export const func2 = () => {...}
// 而不是
module.exports = { func1, func2 }
module.exports = {
mode: 'production', // 生产模式自动启用tree shaking
optimization: {
usedExports: true, // 标记未使用的导出
minimize: true, // 启用代码压缩
sideEffects: true // 启用sideEffects优化
}
}
{
"sideEffects": [
"*.css",
"*.scss"
]
}
module.exports = {
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename]
}
}
}
module.exports = {
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': path.resolve('src')
},
modules: [path.resolve(__dirname, 'node_modules')]
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
include: path.resolve('src'),
use: ['babel-loader']
}
]
}
}
// 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
module.exports = {
plugins: [
new webpack.DllReferencePlugin({
manifest: require('./dll/vendor-manifest.json')
})
]
}
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin()
]
}
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");
const smp = new SpeedMeasurePlugin();
module.exports = smp.wrap({
// 原有webpack配置
});
通过以上优化策略的组合使用,可以显著提升Webpack项目的构建速度和输出质量。建议根据项目实际情况逐步实施这些优化措施,并使用分析工具验证优化效果。