83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const { CleanWebpackPlugin } = require("clean-webpack-plugin");
 | |
| const path = require("path");
 | |
| const webpack = require("webpack");
 | |
| const { merge } = require("webpack-merge");
 | |
| const HtmlWebpackPlugin = require("html-webpack-plugin");
 | |
| const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
 | |
| const MiniCSSExtractPlugin = require("mini-css-extract-plugin");
 | |
| const TerserPlugin = require("terser-webpack-plugin");
 | |
| 
 | |
| const helpers = require("./helpers");
 | |
| const commonConfig = require("./webpack.config.common");
 | |
| 
 | |
| const isProd = process.env.NODE_ENV === "production";
 | |
| const environment = isProd
 | |
|   ? require("./env/prod.env")
 | |
|   : require("./env/staging.env");
 | |
| 
 | |
| const webpackConfig = merge(commonConfig(false), {
 | |
|   mode: "production",
 | |
|   stats: { children: false },
 | |
|   output: {
 | |
|     path: helpers.root("public/dist"),
 | |
|     publicPath: "/public/dist/",
 | |
|     filename: "js/[name].bundle.[fullhash:7].js"
 | |
|   },
 | |
|   optimization: {
 | |
|     splitChunks: {
 | |
|       cacheGroups: {
 | |
|         styles: {
 | |
|           name: "styles",
 | |
|           test: /\.css$/,
 | |
|           chunks: "all",
 | |
|           enforce: true
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|     minimize: true,
 | |
|     minimizer: [
 | |
|       new HtmlWebpackPlugin({
 | |
|         chunks: ["vinlottis"],
 | |
|         filename: "index.html",
 | |
|         template: "./frontend/templates/Index.html",
 | |
|         inject: true,
 | |
|         minify: {
 | |
|           removeComments: true,
 | |
|           collapseWhitespace: false,
 | |
|           preserveLineBreaks: true,
 | |
|           removeAttributeQuotes: true
 | |
|         }
 | |
|       }),
 | |
|       new OptimizeCSSAssetsPlugin({
 | |
|         cssProcessorPluginOptions: {
 | |
|           preset: ["default", { discardComments: { removeAll: true } }]
 | |
|         }
 | |
|       }),
 | |
|       new TerserPlugin({
 | |
|         test: /\.js(\?.*)?$/i,
 | |
|       })
 | |
|     ]
 | |
|   },
 | |
|   plugins: [
 | |
|     new CleanWebpackPlugin(), // clean output folder
 | |
|     new webpack.EnvironmentPlugin(environment),
 | |
|     new MiniCSSExtractPlugin({
 | |
|       filename: "css/[name].[fullhash:7].css"
 | |
|     })
 | |
|   ]
 | |
| });
 | |
| 
 | |
| if (!isProd) {
 | |
|   webpackConfig.devtool = "source-map";
 | |
| }
 | |
| 
 | |
| if (process.env.BUILD_REPORT) {
 | |
|   const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
 | |
|     .BundleAnalyzerPlugin;
 | |
|   webpackConfig.plugins.push(new BundleAnalyzerPlugin());
 | |
| }
 | |
| 
 | |
| module.exports = webpackConfig;
 |