const TerserPlugin = require('terser-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const { SourceMapDevToolPlugin } = require("webpack"); const path = require('path'); module.exports = { mode: 'production', entry: { app: path.resolve(__dirname, 'src/app.js') }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'static/js/'), clean: true }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'], }, { test: /\.(png|jpe?g|gif|svg)$/i, type: 'asset/resource', generator: { filename: '../images/[name][ext][query]' } }, { test: /\.(ttf|eot|woff2?|otf)(\?v=\d+\.\d+\.\d+)?$/, type: 'asset/resource', generator: { filename: '../fonts/[name][ext][query]' } }, ], }, resolve: { extensions: ['.js', '.jsx', '.css'] }, plugins: [ new MiniCssExtractPlugin(), new SourceMapDevToolPlugin({ filename: "[file].map" }) ], optimization: { splitChunks: { chunks: 'all', cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all', }, }, }, minimizer: [ new TerserPlugin({ terserOptions:{ compress: { drop_console: false, } } }), new CssMinimizerPlugin() ] }, };