Description
- Operating System: Windows
- Node Version: v12.16.1
- NPM Version: 6.13.4
- webpack Version: 5.18.0
- webpack-dev-server Version : 3.11.2
- Browser: All
- This is a bug
- This is a modification request
App Container config
const ReactRefreshPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
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",
target:"web",
mode: "development",
devServer: {
contentBase: path.join(__dirname, "public"),
port: 3001,
hotOnly:true,
open:true
},
output: {
publicPath: "auto",
},
resolve: {
extensions: [".js", ".jsx", ".json", ".ts", ".tsx"],
},
module: {
rules: [
{
test: /bootstrap\.tsx$/,
loader: "bundle-loader",
options: {
lazy: true,
},
},
{
test: /\.tsx?$/,
loader: "babel-loader",
exclude: /node_modules/,
options: {
plugins: ['react-refresh/babel'],
presets: ["@babel/preset-react", "@babel/preset-typescript"],
},
},
{
enforce: "pre",
test: /\.js$/,
loader: "source-map-loader",
},
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 2,
sourceMap: true,
},
},
{
loader: 'postcss-loader',
options: {
options: {}
}
},
],
},
{
test: /\.s[ac]ss$/i,
use: [
'style-loader',
'css-loader',
'resolve-url-loader',
'sass-loader',
],
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader',
],
},
],
},
plugins: [
new ModuleFederationPlugin({
name: "appshell",
filename: "remoteEntry.js",
remotes: {
mfsectors: "mfsectors@http://localhost:3002/remoteEntry.js",
},
exposes: {
"./routes": "./src/routes",
"./src/store/**": "./src/store"
},
shared: {
...deps,
react: {
eager: true,
singleton: true,
requiredVersion: deps.react,
},
"react-dom": {
eager: true,
singleton: true,
requiredVersion: deps["react-dom"],
},
},
}),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "public", "index.html"),
}),
new ReactRefreshPlugin({
exclude: [/node_modules/, /bootstrap\.tsx$/],
}),
],
};
Federate appconfig
const ReactRefreshPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
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.ts",
mode: "development",
devServer: {
contentBase: path.join(__dirname, "public"),
port: 3002,
hotOnly:true
},
output: {
publicPath: "auto",
},
resolve: {
extensions: [".js", ".jsx", ".json", ".ts", ".tsx"],
},
module: {
rules: [
{
test: /bootstrap\.tsx$/,
loader: "bundle-loader",
options: {
lazy: true,
},
},
{
test: /\.tsx?$/,
loader: "babel-loader",
exclude: /node_modules/,
options: {
plugins: ['react-refresh/babel'],
presets: ["@babel/preset-react", "@babel/preset-typescript"],
},
},
{
enforce: "pre",
test: /\.js$/,
loader: "source-map-loader",
},
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 2,
sourceMap: true,
},
},
{
loader: 'postcss-loader',
options: {
options: {}
}
},
],
},
{
test: /\.s[ac]ss$/i,
use: [
'style-loader',
'css-loader',
'resolve-url-loader',
'sass-loader',
],
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader',
],
},
],
},
plugins: [
new ModuleFederationPlugin({
name: "mfsectors",
filename: "remoteEntry.js",
remotes: {
appshell: "appshell@http://localhost:3001/remoteEntry.js",
},
exposes: {
"./routes": "./src/routes",
"./Pages/SectorsList" : "./src/Pages/SectorsList.tsx"
},
shared: {
...deps,
react: {
eager: true,
singleton: true,
requiredVersion: deps.react,
},
"react-dom": {
eager: true,
singleton: true,
requiredVersion: deps["react-dom"],
},
},
}),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "public", "index.html"),
}),
new ReactRefreshPlugin({
exclude: [/node_modules/, /bootstrap\.tsx$/],
}),
],
};
Expected Behavior
App Container auto reload when federate app change
Actual Behavior
Hello,
I have finally succeeded in setting up my software environment (Dashboard...) in micro-frontend thanks to Module Federation. Only I notice that the live & hot reloading doesn't work when I modify a federate module:
I explain myself, I work on an App Shell which contains all my micro frontends (an app which manages the connection, the authorization in RBAC, the redux provider, etc...) and which will control all the other federated applications, only the automatic refresh will not reload the port 3001(AppShell) if I work on an app of the port 3002.
While searching on the internet I could find some unanswered questions about this, I would like to understand how is it possible to reload the app container automatically?