🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

use-lazy-module-federation

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

use-lazy-module-federation

## 1.Reason

1.0.2
Source
npm
Version published
Weekly downloads
4
-78.95%
Maintainers
1
Weekly downloads
 
Created
Source

use-lazy-module-federation

1.Reason

This project is to make Micro FE with Module Federation become easier to use

This project was inspire from this sample to load dynamic remote module advanced-api/dynamic-remotes from Creator of Module Federation

But it's still complex to understand all the mechanism to load remote module, so I create this hook to wrap that complex mechanism

2.Setup Module Federation

  • To use Module Federation, you webpack version must >= 5

2.1.If your project running in webpack

  • go to webpack.config.js
  • add these config to plugins part:

const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin

module.exports = {
  // ... 
  plugins: [
    // ... 
    new ModuleFederationPlugin({
      name: "home",
      filename: "remoteEntry.js",
      shared: [
        {
          react: { singleton: true, eager: true },
          "react-dom": { singleton: true, eager: true }
        }
      ]
    }),
  ],

};

2.2.If your project running in cra

  • install react-app-rewired yarn add -D react-app-rewired
  • react-app-rewired will merge your override config with the default webpack config from cra and you can inject your additional settings
  • add file config-overrides.js with these content:
const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin

module.exports = function override(config, env) {
  config.plugins = config.plugins || []
  
  config.plugins.push(
    new ModuleFederationPlugin({
      name: "home",
      filename: "remoteEntry.js",
      shared: [
        {
          react: { singleton: true, eager: true },
          "react-dom": { singleton: true, eager: true }
        }
      ]
    }),
  )

  return config;
}

  • adjust your running script, replace react-scripts with react-app-rewired
 "scripts": {
    "dev": "react-app-rewired start",
    "build": "react-app-rewired build",
    "start": "serve -s build -l 3000",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  },

3.Setup this hook and complete setup

yarn add -D use-lazy-module-federation

4.Coding

import { useLazyModuleFederation } from "use-lazy-module-federation";

type RemoteComponentProps = {
  title?: string
}

export default function Container() {
  const { Component: RemoteComponent, errorLoading } = useLazyModuleFederation<RemoteComponentProps>({  
    url: 'http://localhost:3003/remoteEntry.js',
    scope: 'app3',
    module: './Widget',
  });

  return (
    <>
      <Suspense fallback="Loading System">
        {errorLoading
          ? `Error loading module "${module}"`
          : RemoteComponent && <RemoteComponent title="hello" />}
      </Suspense>
    </>
  )

}

FAQs

Package last updated on 11 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts