mock and expose module federation runtime API

this package simulates and exposes the module-federation API, Support browser and node environment
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
- Installation
- Usage
- API
- remotes
- shareScopes
- initSharing
- registerShared
- findShared
- registerRemotes
- findRemote
- findModule
``sh`
npm install module-federation-runtime
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
$3
wait for all remote modules to be initialized
`js
initSharing(shareScopeKey: string): Promise<1>;initSharing("default").then(() => {})
`$3
`js
registerShared(shared: {
[name: string]: {
get: function(): ModuleFactory;
version: string;
loaded?: boolean;
from?: string;
shareScope?: string;
};
}, shareScopes?: ShareScopes): void;
`$3
`js
findShared(shareConfig: {
name: string;
strictVersion?: boolean;
singleton?: boolean;
shareScope?: string;
requiredVersion?: string;
}, shareScopes?: ShareScopes): RegisteredShare;
`$3
`js
registerRemotes(remotes?: {
[global: string]: {
url: string;
shareScope?: string;
};
}, customLoadScript?: function():Promise, shareScopes?: ShareScopes): Promise;
`$3
`js
findRemote(global: string): Promise;
`$3
`js
findModule(global: string, path: string): Promise$3
`js
remotes: {
[global: string]: {
url: string;
shareScope?: string;
container: ModuleFederationContainer;
containerPromise: Promise;
};
};
`$3
`js
shareScopes: {
[key: string]: ShareScope;
};
``