const path = require('path');
const { merge } = require('webpack-merge');
const baseConfig = require('./webpack.config.base');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const TerserJSPlugin = require('terser-webpack-plugin');
const Webpack = require('webpack');
const CopyPlugin = require('copy-webpack-plugin');

module.exports = merge(baseConfig, {
    mode: 'production',
    devtool: 'source-map',
    stats: 'minimal',
    performance : {
        hints : false
    },
    output: {
        path: path.resolve(__dirname, '../../../build2/static'),
        filename: '[name].bundle.[hash:5].js',
        publicPath: '/'
    },
    optimization: {
        minimizer: [new TerserJSPlugin({terserOptions: {
            output: {
              comments: false,
            },
          },
          extractComments: false,
        }), new OptimizeCSSAssetsPlugin({})],
        splitChunks: {
            cacheGroups: {
                styles: {
                    name: 'styles',
                    test: /\.css$/,
                    chunks: 'all',
                    enforce: true,
                },
            },
        },
    },
    module: {
        rules: [
            {
                test: (resource) => {
                    return (
                        resource.indexOf('.pcss')+1
                        || resource.indexOf('.css')+1
                        || resource.indexOf('.less')+1
                    ) && !(resource.indexOf('.module.')+1);
                },
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                }, 'css-loader', 'postcss-loader', {
                    loader: 'less-loader',
                    options: {
                        javascriptEnabled: true,
                    },
                }],
                exclude: /node_modules/,
            },
            {
                test: /\.module\.p?css$/,
                use: [
                        {
                            loader: MiniCssExtractPlugin.loader,
                        },
                        {
                            loader: 'css-loader',
                            options: {
                                modules: true,
                                sourceMap: true,
                                importLoaders: 1,
                            },
                        },
                        'postcss-loader',
                ],
                exclude: /node_modules/,
            }
        ]
    },
    plugins: [
        new Webpack.DefinePlugin({
            DEV: false,
        }),
        new MiniCssExtractPlugin({
            filename: '[name].[hash:5].css',
        }),
    ]
});