const path = require("path"); const copy = require("copy-webpack-plugin"); const extract = require("mini-css-extract-plugin"); const webpack = require("webpack"); const CompressionPlugin = require("compression-webpack-plugin"); const nodedir = path.resolve((process.env.SRCDIR || __dirname), "node_modules"); /* 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"}) ]; /* Only minimize when in production mode */ if (production) { plugins.unshift(new CompressionPlugin({ test: /\.(js|html|css)$/, deleteOriginalAssets: true })); } /* keep this in sync with cockpit.git */ const babel_loader = { loader: "babel-loader", options: { presets: [ ["@babel/env", { "targets": { "chrome": "57", "firefox": "52", "safari": "10.3", "edge": "16", "opera": "44" } }], "@babel/preset-react" ] } } module.exports = { mode: production ? 'production' : 'development', resolve: { modules: [ nodedir ], }, resolveLoader: { modules: [ nodedir, path.resolve(__dirname, 'src/lib') ], }, watchOptions: { ignored: /node_modules/, }, entry: { index: "./src/index.js", }, // cockpit.js gets included via