yunhan-cli
Version:
react17 + react-router + redux + typescript
50 lines (48 loc) • 1.49 kB
JavaScript
const { merge } = require('webpack-merge');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const common = require('./webpack.common.js');
const paths = require('../paths');
const { shouldOpenAnalyzer, ANALYZER_HOST, ANALYZER_PORT } = require('../conf');
module.exports = merge(common, {
mode: 'production',
devtool: false,
target: 'browserslist',
output: {
filename: 'js/[name].[contenthash:8].js',
path: paths.appBuild,
assetModuleFilename: 'images/[name].[contenthash:8].[ext]',
},
plugins: [
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
filename: 'css/[name].[contenthash:8].css',
chunkFilename: 'css/[name].[contenthash:8].chunk.css',
}),
shouldOpenAnalyzer &&
new BundleAnalyzerPlugin({
analyzerMode: 'server',
analyzerHost: ANALYZER_HOST,
analyzerPort: ANALYZER_PORT,
}),
].filter(Boolean),
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
terserOptions: {
compress: { pure_funcs: ['console.log'] },
},
}),
new CssMinimizerPlugin(),
],
splitChunks: {
chunks: 'all',
minSize: 0,
},
},
});