const webpack = require("webpack"); const path = require("path"); const CircularDependencyPlugin = require("circular-dependency-plugin"); const isProduction = process.env.NODE_ENV === "production"; const isMock = process.env.NODE_ENV === "mock"; const config = { entry: { cockpit: "./src/cockpit.js", "mass-graduation": "./src/mass-graduation.js", "admin-tools": "./src/admin-tools.js", coaching: "./src/coaching.js", }, output: { path: path.resolve(__dirname, "dist"), }, module: { rules: [ { test: /\.(js|ts)$/, exclude: /node_modules/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env", "@babel/preset-typescript"], }, }, }, { test: /\.png/, type: "asset/inline", }, ], }, plugins: [ new webpack.NormalModuleReplacementPlugin(/-ENV.(js|ts)/, (resource) => { resource.request = resource.request.replace(/-ENV/, `-${isMock ? "mock" : "prod"}`); if (resource.createData) { resource.createData.request = resource.request; } }), new CircularDependencyPlugin({ // exclude detection of files based on a RegExp exclude: /node_modules/, // add errors to webpack instead of warnings failOnError: true, // allow import cycles that include an asyncronous import, // e.g. via import(/* webpackMode: "weak" */ './file.js') allowAsyncCycles: false, // set the current working directory for displaying module paths cwd: process.cwd(), }), ], }; module.exports = () => { if (isProduction) { config.mode = "production"; } else { config.mode = "development"; } return config; };