# module-federation-runtime

> mock and expose module federation runtime API

Latest version **1.2.4** (published 2023-10-10) · ISC license · 0 weekly downloads

## Install

```sh
npm install module-federation-runtime
pnpm add module-federation-runtime
yarn add module-federation-runtime
bun add module-federation-runtime
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.4 |
| Published | 2023-10-10 |
| First published | 2023-03-20 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 199.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | zhanghongen |
| Keywords | module-federation, runtime |

## Links

- npm: https://www.npmjs.com/package/module-federation-runtime
- Homepage: https://github.com/zhangHongEn/universal-module-federation-plugin/tree/main/packages/module-federation-runtime
- npm.io page: https://npm.io/package/module-federation-runtime

## Dependencies (1)

- [global](https://npm.io/package/global.md) ^4.4.0

## Recent versions

- 1.2.4 (latest) — 2023-10-10
- 1.2.4-beta.0 (beta) — 2023-10-10
- 1.2.3 — 2023-09-21
- 1.2.2 — 2023-09-21
- 1.2.1 — 2023-09-21
- 1.2.0-beta.12 — 2023-09-21
- 1.2.0-beta.11 — 2023-09-21
- 1.2.0-beta.10 — 2023-09-21
- 1.2.0-beta.9 — 2023-09-21
- 1.2.0-beta.8 — 2023-09-21
- 1.2.0-beta.7 — 2023-09-21
- 1.2.0-beta.6 — 2023-09-21
- 1.2.0-beta.5 — 2023-09-21
- 1.2.0-beta.4 — 2023-09-21
- 1.2.0-beta.3 — 2023-09-21
- … 47 more at https://npm.io/package/module-federation-runtime/versions

## README

# module-federation-runtime

[![npm](https://img.shields.io/npm/v/single-react-refresh-plugin.svg)](https://www.npmjs.com/package/module-federation-runtime)

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](https://h3manth.com/posts/dynamic-remotes-webpack-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](#installation)
- [Usage](#usage)
- [API](#api)
  - [remotes](#remotes)
  - [shareScopes](#sharescopes)
  - [initSharing](#initsharing)
  - [registerShared](#registershared)
  - [findShared](#findshared)
  - [registerRemotes](#registerremotes)
  - [findRemote](#findremote)
  - [findModule](#findmodule)

## Installation

```sh
npm install module-federation-runtime
```

## Usage example
```js
// browser
import * as runtime from 'module-federation-runtime';
// node
import * as runtime from 'module-federation-runtime/dist/node';
```

```js
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

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

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

### registerShared

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

### findShared

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

### registerRemotes

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

### findRemote

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

### findModule

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

### remotes

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

### shareScopes

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

---
_Source: https://npm.io/package/module-federation-runtime · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
