'use strict'; const webpack = require('webpack'); const merge = require('webpack-merge'); const HtmlPlugin = require('html-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const helpers = require('./helpers'); const commonConfig = require('./webpack.config.common'); const isProd = process.env.NODE_ENV === 'production'; const environment = require('./prod.env'); const VERSION = process.env.VERSION; const webpackConfig = merge(commonConfig, { mode: 'production', output: { path: helpers.root('dist'), publicPath: '', filename: 'js/bundle.js', chunkFilename: 'js/[name].chunk.js', }, optimization: { runtimeChunk: 'single', minimize: true, minimizer: [ new OptimizeCSSAssetsPlugin({ cssProcessorPluginOptions: { preset: [ 'default', { discardComments: { removeAll: true } } ], } }), new UglifyJSPlugin({ cache: true, parallel: true, sourceMap: !isProd }) ], splitChunks: { chunks: 'all', maxInitialRequests: Infinity, minSize: 0, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, chunks: "all", name: "vendor", enforce: true }, styles: { test: /\.css$/, name: 'style', chunks: 'all', enforce: true } } } }, plugins: [ new webpack.EnvironmentPlugin(environment), new CleanWebpackPlugin(), // new webpack.optimize.LimitChunkCountPlugin({ // maxChunks: 1 // }), new MiniCSSExtractPlugin({ filename: 'css/[name].css', chunkFilename: 'css/[name].css' }), new CompressionPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: new RegExp('\\.(js|css)$'), threshold: 10240, minRatio: 0.8 }), // new webpack.HashedModuleIdsPlugin(), new HtmlPlugin({ template: 'public/base.gohtml', filename: 'base.gohtml', inject: false, minify: false }) ] }); if (!isProd) { webpackConfig.devtool = 'source-map'; if (process.env.npm_config_report) { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; webpackConfig.plugins.push(new BundleAnalyzerPlugin()); } } module.exports = webpackConfig;