const path = require("path"); const copy = require("copy-webpack-plugin"); const extract = require("mini-css-extract-plugin"); const TerserJSPlugin = require('terser-webpack-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); const CompressionPlugin = require("compression-webpack-plugin"); const ESLintPlugin = require('eslint-webpack-plugin'); const CockpitPoPlugin = require("./src/lib/cockpit-po-plugin"); // HACK: OpenSSL 3 does not support md4 any more, but webpack hardcodes it all over the place: https://github.com/webpack/webpack/issues/13572 const crypto = require("crypto"); const crypto_orig_createHash = crypto.createHash; crypto.createHash = algorithm => crypto_orig_createHash(algorithm == "md4" ? "sha256" : algorithm); /* A standard nodejs and webpack pattern */ const production = process.env.NODE_ENV === 'production'; // Non-JS files which are copied verbatim to dist/ const copy_files = [ "./src/index.html", "./src/manifest.json", ]; const plugins = [ new copy({ patterns: copy_files }), new extract({filename: "[name].css"}), new ESLintPlugin({ extensions: ["js", "jsx"] }), new CockpitPoPlugin(), ]; /* Only minimize when in production mode */ if (production) { plugins.unshift(new CompressionPlugin({ test: /\.(js|html|css)$/, deleteOriginalAssets: true })); } module.exports = { mode: production ? 'production' : 'development', resolve: { modules: [ "node_modules", path.resolve(__dirname, 'src/lib') ], alias: { 'font-awesome': 'font-awesome-sass/assets/stylesheets' }, }, resolveLoader: { modules: [ "node_modules", path.resolve(__dirname, 'src/lib') ], }, watchOptions: { ignored: /node_modules/, }, entry: { index: "./src/index.js", }, // cockpit.js gets included via