Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
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.6
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
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>
    </>
  )

}

5.Demo

example here

Happy coding ♥

Keywords

FAQs

Package last updated on 12 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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc