const path = require('path'); const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); module.exports = { mode: 'production', entry: { bundle: './bundle-entry.js' }, output: { path: path.resolve(__dirname, 'static/dist'), filename: '[name].js', }, module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader' ] }, // For Bootstrap fonts { test: /\.(woff|woff2|eot|ttf|svg)$/, type: 'asset/resource', generator: { filename: 'fonts/[name][ext]' } } ] }, optimization: { minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { compress: { drop_console: true, passes: 2 }, mangle: true, output: { comments: false } } }), new CssMinimizerPlugin() // For CSS optimization ], }, plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), new MiniCssExtractPlugin({ filename: '[name].css' }) ], resolve: { alias: { 'jquery': path.resolve(__dirname, 'node_modules/jquery/dist/jquery.js'), '/js/vendor/viz-standalone.mjs': path.resolve(__dirname, 'node_modules/@viz-js/viz/lib/viz-standalone.mjs'), '/js/vendor/fuse.min.mjs': path.resolve(__dirname, 'node_modules/fuse.js/dist/fuse.mjs') } } };