多环境配置
例如webpack-dev-server这类操作,在实际生成环境中基本不需要,而复制多个配置文件又难以统一管理,因此需要合适发方法管理不同的环境
1. 硬核继承法
基类
webpack.config.base.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
module.exports = {
entry: "./src/index.js",
output: {
filename: "index.[contenthash].js"
},
plugins: [
new HtmlWebpackPlugin({
title: "XDM",
template: "src/assets/index.html"
})
],
module: {
rules: [
{
test: /\.(png|svg|jpg|gif)$/,
use: ["file-loader"]
},
{
test: /\.styl$/,
loader: ["style-loader", "css-loader", "stylus-loader"]
},
{
test: /\.less$/,
loader: ["style-loader", "css-loader", "less-loader"]
},
{
test: /\.scss$/i,
use: [
"style-loader",
"css-loader",
{
loader: "sass-loader",
options: {
implementation: require("dart-sass")
}
}
]
}
]
}
};
生产环境:
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require("path");
const base = require('./webpack.config.base.js')
module.exports = {
...base,
devtool: "inline-source-map",
devServer: {
contentBase: "./dist" //新版使用static
},
module: {
rules: [
...base.module.rules,// 使用对象扩展运算符分离基类的规则
{
test: /\.css$/i,
use: ["style-loader", "css-loader"]
}
]
}
};
产品环境:
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require("path");
const base = require('./webpack.config.base.js')
module.exports = {
...base,
mode: "production",
plugins: [
...base.plugins,
new MiniCssExtractPlugin({
filename: '[name].[contenthash].css',
chunkFilename: '[id].[contenthash].css',
ignoreOrder: false, // Enable to remove warnings about conflicting order
}),
],
module: {
rules: [
...base.module.rules,
{
test: /\.css$/i,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../',
},
},
'css-loader',
],
}
]
}
};
2.借助插件
-
安装
npm i -D webpack-merge -
在脚本中设置合并 例如创建测试环境文件,webpack.config.dev.js
const { merge } = require("webpack-merge")
const common = require("./webpack.config.js")
module.exports = merge(common, {
devServer: {
static: './dist'
},
})
3.模式设置
1.写法
module.exports = {
mode:"development",
......
}
具体细节参考文档