const fs = require("fs"); 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"); const CockpitRsyncPlugin = require("./src/lib/cockpit-rsync-plugin"); /* A standard nodejs and webpack pattern */ const production = process.env.NODE_ENV === 'production'; // Obtain package name from package.json const packageJson = JSON.parse(fs.readFileSync('package.json')); // 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"], failOnWarning: true, }), new CockpitPoPlugin(), new CockpitRsyncPlugin({dest: packageJson.name}), ]; /* 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