This chapter introduces how to build Module Federation output in Rslib.
Module Federation is a JavaScript application divide-and-conquer architecture pattern (similar to server-side microservices) that allows you to share code and resources between multiple JavaScript applications (or Micro-Frontend).
Module federation has some typical usage scenarios, including:
Module Federation can help you:
First install the Module Federation Rsbuild Plugin (Rslib is based on Rsbuild).
Add the plugin to the rslib.config.ts
file:
In this way, we have completed the integration of Rslib Module as a producer. After the construction is completed, we can see that the mf directory has been added to the product, and consumers can directly consume this package
In the above example we added a new format: 'mf'
, which will help you add an additional Module Federation product, while also configuring the format of cjs
and esm
, which does not conflict.
However, if you want this Rslib Module to consume other producers at the same time, do not use the build configuration remote
parameter, because in other formats, this may cause errors, please refer to the example below using the Module Federation runtime
Because there are multiple formats in Rslib, if you configure the remote
parameter to consume other modules during construction, it may not work properly in all formats. It is recommended to access through the Module Federation Runtime
First install the runtime dependencies
Then consume other Module Federation modules at runtime, for example
This ensures that modules can be loaded as expected in multiple formats.
If the Rslib producer is built with build, this means that the process.env.NODE_ENV
of the producer is production
. If the consumer is started in dev mode at this time,
Due to the shared loading policy of Module Federation being version-first
by default, there may be problems loading into different modes of react and react-dom (e.g. react in development mode, react-dom in production mode).
You can set up shareStrategy at the consumer to solve this problem, but make sure you fully understand this configuration
Rslib Module Federation Example
mf-host
: Rsbuild App Consumermf-react-component
: Rslib Module, which is both a producer and a consumer, provides the module to the mf-host
as a producer, and consumes the mf-remote
mf-remote
: Rsbuild App Producer