const ESLintPlugin = require('eslint-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); module.exports = (env, argv) => { const node_env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; const dev = node_env !== 'production'; const config = { mode: node_env, devtool: dev ? 'source-map' : false, entry: { 'scripts': [ __dirname + '/src/main/assets/scripts.js' ] }, output: { path: __dirname + '/src/main/resources/static', filename: '[name].js' }, module: { rules: [{ test: /\.js$/, exclude: [ /\bnode_modules\b/, /\bcore-js\b/, /\bwebpack\/buildin\b/ ], loader: 'babel-loader' }] }, plugins: [ new CopyPlugin({ patterns: [{ from: __dirname + '/node_modules/evil-icons/assets/sprite.svg', to: __dirname + '/src/main/resources/static/' }], }), ], resolve: { symlinks: false, extensions: ['.js'] } }; if (dev) { config.plugins.push( new ESLintPlugin({ files: 'src/main/assets', lintDirtyModulesOnly: true, failOnWarning: false, failOnError: true, fix: false })); } config.optimization = { minimize: !dev, minimizer: [ new TerserPlugin({ minify: TerserPlugin.swcMinify, // `terserOptions` options will be passed to `swc` (`@swc/core`) // Link to options - https://swc.rs/docs/config-js-minify terserOptions: {}, }), ] }; return config; };