module-federation-runtime
TypeScript icon, indicating that this package has built-in type declarations

1.2.4 • Public • Published

module-federation-runtime

npm

this package simulates and exposes the module-federation API, Support browser and node environment

applicable scene

  1. can be used to implement module-federation in different compilation environments
  2. can be used to dynamically load module-federation modules

    Please try to register all remotes in the initialization phase of the entire project as much as possible to achieve the same effect as when compiling Otherwise, it will be difficult for you to maintain your shared: singleton, requiredVersion and other strategies because the shared library will be dynamically added during runtime

Table of Contents

Installation

npm install module-federation-runtime

Usage example

// browser
import * as runtime from 'module-federation-runtime';
// node
import * as runtime from 'module-federation-runtime/dist/node';
import { remotes, shareScopes, initSharing, registerShared, findShared, registerRemotes, findRemote, findModule } from 'module-federation-runtime';

;(async function () {
  await registerRemotes({
    "mfapp01": {
      url: "https://cdn.jsdelivr.net/npm/mf-app-01/dist/remoteEntry.js"
    },
    "mfapp02": {
      url: "https://cdn.jsdelivr.net/npm/mf-app-02@latest/dist/remoteEntry.js"
    }
  })
  registerShared({
    "react-dom1": {
      version: "18.0.0",
      get() {
        return function () {
          return {
            test: 1
          }
        }
      }
    }
  })
  const AppFactory = await findModule("mfapp01", "./App")
  const shareReactDom = findShared({
    name: "react-dom",
    requiredVersion: "18"
  })
  console.log("remotes", remotes)
  console.log("findRemote", findRemote("mfapp01"))
  const App = AppFactory()
  console.log("App", App)
  console.log("shareScopes", shareScopes)
  console.log("shareReactDom from:", shareReactDom.from)
  console.log("shareReactDom value:", (await shareReactDom.get())())
})()

API

initSharing

wait for all remote modules to be initialized

initSharing(shareScopeKey: string): Promise<1>;

initSharing("default").then(() => {})

registerShared

registerShared(shared: {
  [name: string]: {
    get: function(): ModuleFactory;
    version: string;
    loaded?: boolean;
    from?: string;
    shareScope?: string;
  };
}, shareScopes?: ShareScopes): void;

findShared

findShared(shareConfig: {
  name: string;
  strictVersion?: boolean;
  singleton?: boolean;
  shareScope?: string;
  requiredVersion?: string;
}, shareScopes?: ShareScopes): RegisteredShare;

registerRemotes

registerRemotes(remotes?: {
  [global: string]: {
    url: string;
    shareScope?: string;
  };
}, customLoadScript?: function():Promise<any>, shareScopes?: ShareScopes): Promise;

findRemote

findRemote(global: string): Promise<ModuleFederationContainer>;

findModule

findModule(global: string, path: string): Promise<ModuleFactory>

### remotes

```js
remotes: {
  [global: string]: {
    url: string;
    shareScope?: string;
    container: ModuleFederationContainer;
    containerPromise: Promise<ModuleFederationContainer>;
  };
};

shareScopes

shareScopes: {
  [key: string]: ShareScope;
};

/module-federation-runtime/

    Package Sidebar

    Install

    npm i module-federation-runtime

    Weekly Downloads

    160

    Version

    1.2.4

    License

    ISC

    Unpacked Size

    204 kB

    Total Files

    17

    Last publish

    Collaborators

    • zhanghongen