const webpack = require('webpack'); const merge = require('webpack-merge'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const common = require('./webpack.common.js'); const commitHash = require('child_process') .execSync('git rev-parse --short HEAD') .toString() .trim(); module.exports = merge(common, { mode: 'production', module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, "css-loader" ]} ] }, devtool: 'source-map', optimization: { minimizer: [ new UglifyJsPlugin({ cache: true, parallel: true, sourceMap: true }), new OptimizeCssAssetsPlugin({ assetNameRegExp: /\.optimize\.css$/g, cssProcessor: require('cssnano'), cssProcessorOptions: { discardComments: {removeAll: true } }, canPrint: true }) ] }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), new MiniCssExtractPlugin({ filename: "[name].css", chunkFilename: "[id].css" }), new webpack.DefinePlugin({ __COMMIT_HASH__: JSON.stringify(commitHash + '-prod'), }) ] })