mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
| '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 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;
 |