拆分配置和merge
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const webpack = require('webpack')
module.exports = {
entry: {
main: './src/index.js',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' },
]
},
{
test: /\.png$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]',
},
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new CleanWebpackPlugin(),
new webpack.ProvidePlugin({
$: 'jquery'
})
],
output: {
publicPath: '/',
path: path.resolve(__dirname, '../dist'),
},
optimization: {
usedExports: true,
splitChunks: {
chunks: 'all',
minSize: 20000,
minRemainingSize: 0,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
enforceSizeThreshold: 50000,
cacheGroups: {
defaultVendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10,
filename: 'vendor.js',
reuseExistingChunk: true,
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true,
filename: 'common'
},
},
}
},
}
const webpack = require('webpack')
const { merge } = require("webpack-merge")
const commonConfig = require('./webpack.common')
const devConfig = {
mode: 'development',
devtool: 'eval',
devServer: {
contentBase: './dist',
port: 3000,
open: true,
hot: true,
},
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 2,
modules: true,
},
},
'sass-loader',
'postcss-loader',
],
},
]
},
plugins: [
new webpack.HotModuleReplacementPlugin()
],
output: {
filename: '[name].js',
chunkFilename: '[name].js',
}
}
module.exports = merge(commonConfig, devConfig)
const { merge } = require("webpack-merge")
const commonConfig = require('./webpack.common')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const prodConfig = {
mode: 'production',
devtool: 'cheap-module-source-map',
plugins: [new MiniCssExtractPlugin({
filename: '[name].css',
chunkFilename: "[name].chunk.css"
})],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
optimization: {
minimizer: [
new CssMinimizerPlugin(),
],
},
output: {
filename: '[name].[contenthash].js',
chunkFilename: '[name].[contenthash].js',
}
module.exports = merge(commonConfig, prodConfig)