const HtmlWebpackPlugin = require("html-webpack-plugin"); const ModuleFederationPlugin = require("webpack").container .ModuleFederationPlugin; const path = require("path"); const deps = require("./package.json").dependencies; module.exports = { entry: "./src/index", mode: "development", devtool: "inline-source-map", devServer: { contentBase: [path.join(__dirname, "public"), path.join(__dirname, "dist")], contentBasePublicPath: "/products/files/", port: 5008, historyApiFallback: true, hot: false, hotOnly: false, headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization", }, //openPage: "http://localhost:8092/products/files", }, resolve: { extensions: [".jsx", ".js", ".json"], fallback: { crypto: false, }, }, output: { publicPath: "auto", chunkFilename: "[id].[contenthash].js", }, module: { rules: [ { test: /\.m?js/, type: "javascript/auto", resolve: { fullySpecified: false, }, }, { test: /\.react.svg$/, use: [ { loader: "@svgr/webpack", options: { svgoConfig: { plugins: [{ removeViewBox: false }], }, }, }, ], }, { test: /\.json$/, loader: "json-loader" }, { test: /\.css$/i, use: ["style-loader", "css-loader"], }, { test: /\.s[ac]ss$/i, use: [ // Creates `style` nodes from JS strings "style-loader", // Translates CSS into CommonJS "css-loader", // Compiles Sass to CSS "sass-loader", ], }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: [ { loader: "babel-loader", options: { presets: ["@babel/preset-react", "@babel/preset-env"], plugins: [ "@babel/plugin-transform-runtime", "@babel/plugin-proposal-class-properties", "@babel/plugin-proposal-export-default-from", ], }, }, "source-map-loader", ], }, ], }, plugins: [ new ModuleFederationPlugin({ name: "files", filename: "remoteEntry.js", remotes: { studio: "studio@http://localhost:5001/remoteEntry.js", }, exposes: { "./app": "./src/Files.jsx", }, shared: { ...deps, react: { singleton: true, requiredVersion: deps.react, }, "react-dom": { singleton: true, requiredVersion: deps["react-dom"], }, }, }), new HtmlWebpackPlugin({ template: "./public/index.html", }), ], };