const webpack = require("webpack"); const merge = require("webpack-merge"); const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const common = require("./webpack.common"); module.exports = merge(common, { mode: "production", devtool: "none", output: { filename: "[name].[contenthash].min.js", chunkFilename: "[id].[name].[contenthash].min.js", publicPath: "/dist/", }, module: { rules: [ { test: /\.(sa|sc|c)ss$/, use: [ "style-loader", MiniCssExtractPlugin.loader, "css-loader", "postcss-loader", "sass-loader", ], }, ], }, plugins: [ // new webpack.optimize.LimitChunkCountPlugin({ // maxChunks: 1, // }), new MiniCssExtractPlugin({ filename: "[name].[contenthash].min.css", chunkFilename: "[name].[contenthash].min.css", sourceMap: true, }), new webpack.HashedModuleIdsPlugin(), ], optimization: { minimizer: [new UglifyJsPlugin(), new OptimizeCssAssetsPlugin()], runtimeChunk: "single", splitChunks: { chunks: "all", cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name(module) { // get the name. E.g. node_modules/packageName/not/this/part.js // or node_modules/packageName const packageName = module.context.match( /[\\/]node_modules[\\/](.*?)([\\/]|$)/ )[1]; // npm package names are URL-safe, but some servers don't like @ symbols return `vendor.${packageName.replace("@", "")}`; }, }, }, }, }, });