Before reading this chapter, it is assumed that you already understand:
Currently, Module Federation
provides two ways to register and load modules:
One is to declare it in the build plugin (usually in the module-federation.config.ts
file)
The other way is to directly register and load modules through the runtime
API.
The two modes are not conflicting and can be used together. You can flexibly choose the module registration method and timing according to your actual scenario.
The differences between registering modules at runtime and registering modules in the build configuration are as follows:
Registering modules at runtime | Registering modules in the plugin |
---|---|
Can be used without the build plugin, and pure runtime can be used directly for module registration and loading in projects like webpack4 | The build plugin needs to be webpack5 or above |
Supports dynamic module registration | Does not support dynamic module registration |
Does not support loading modules with import syntax | Supports loading modules with import synchronous syntax |
Supports loading modules with loadRemote | Supports loading modules with loadRemote |
Setting shared must provide specific version and instance information | Setting shared only requires configuring rules, without providing specific version and instance information |
shared dependencies can only be used externally, and external shared dependencies cannot be used | shared dependencies are shared bidirectionally according to specific rules |
The loading process can be affected through the runtime 's plugin mechanism | Currently does not support providing plugin to affect the loading process |
Does not support remote type hints | Supports remote type hints |
If the build plugin is used, an MF instance will be automatically created and stored in memory when the project starts. You can directly call methods of the MF instance via the .
If the build plugin is not used, you need to manually create an MF instance before calling the corresponding API.
ModuleFederation
instance?A ModuleFederation
instance is an instance of the ModuleFederation
class, which contains all the functionality of the ModuleFederation
runtime.
You can enter
__FEDERATION__.__INSTANCES__
in the console to view the created instances.
In the following Federation Runtime
examples, we all show cases that are detached from specific frameworks such as Modern.js, so the API will be exported from the initial @module-federation/enhanced/runtime
package.
If your project is a Modern.js project and uses @module-federation/modern-js
, the runtime should export the runtime API from @module-federation/modern-js/runtime
. This ensures that the plugin and the runtime use the same runtime instance, ensuring that modules are loaded normally.
If your project is a Modern.js project but does not use @module-federation/modern-js
, you should export the runtime API from @module-federation/enhanced/runtime
. However, we recommend that you use @module-federation/modern-js
for module registration and loading, which will allow you to enjoy more capabilities combined with the framework.