实现思路
- 创建不同环境的配置文件:在项目根目录下创建
webpack.dev.js
、webpack.test.js
和webpack.prod.js
分别对应开发、测试和生产环境的配置。
- 使用
webpack - merge
合并通用配置:将通用的配置提取到webpack.common.js
,然后使用webpack - merge
工具将通用配置与不同环境的特定配置合并。
- 通过脚本执行不同环境的打包:在
package.json
中定义不同环境的打包脚本,调用webpack - cli
根据不同环境执行打包。
关键配置代码
- 通用配置
webpack.common.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset - env']
}
}
}
]
}
};
- 开发环境配置
webpack.dev.js
const merge = require('webpack - merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
mode: 'development',
devtool: 'inline - source - map'
});
- 生产环境配置
webpack.prod.js
const merge = require('webpack - merge');
const common = require('./webpack.common.js');
const MiniCssExtractPlugin = require('mini - css - extract - plugin');
const TerserPlugin = require('terser - webpack - plugin');
module.exports = merge(common, {
mode: 'production',
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, 'css - loader']
}
]
},
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true
}
}
})
]
},
plugins: [
new MiniCssExtractPlugin({
filename: 'styles.css'
})
]
});
package.json
中的脚本
{
"scripts": {
"dev": "webpack - cli --config webpack.dev.js",
"test": "webpack - cli --config webpack.test.js",
"build": "webpack - cli --config webpack.prod.js"
}
}