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', }, 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; };