Module Federation
Module Federation es una función de los bundlers, introducida en webpack 5, que permite que aplicaciones compiladas por separado carguen código entre sí y compartan librerías en tiempo de ejecución.
Module Federation apareció en webpack 5 y hoy también está disponible en otros bundlers como Rspack. Permite que un build cargue código de otro build en tiempo de ejecución, como si fuera un módulo normal con lazy loading. Los dos builds pueden vivir en repositorios distintos y desplegarse en momentos distintos.
Cada build declara tres cosas en su configuración:
- exposes: los módulos que ofrece a otros.
- remotes: los otros builds que quiere consumir.
- shared: las librerías, como Angular o React, que deben cargarse una sola vez y reutilizarse.
Ejemplo
Una aplicación shell quiere mostrar el área de pedidos, que pertenece a otro equipo. Esta es la configuración del remoto de pedidos:
new ModuleFederationPlugin({
name: 'orders',
filename: 'remoteEntry.js',
exposes: { './routes': './src/app/orders.routes.ts' },
shared: { '@angular/core': { singleton: true, strictVersion: true } },
});
El shell carga orders/routes cuando el usuario navega a /orders. Cuando el equipo de pedidos despliega una versión nueva, el shell la toma en la siguiente carga de página, sin recompilar.
Confusión frecuente
El uso compartido de librerías se negocia en tiempo de ejecución, y es fácil asumir que siempre funciona. Si el host y un remoto piden versiones incompatibles de una librería singleton, el resultado es un error en tiempo de ejecución o dos copias del framework en la página. La política de versiones de las librerías compartidas se acuerda entre equipos y se verifica en CI.
Module Federation resuelve la carga de código. No resuelve el enrutamiento, el estado compartido, la consistencia visual ni los acuerdos entre equipos. En plataformas de microfrontends está el resto del panorama.
Por qué importa. Es el mecanismo más usado para componer microfrontends en tiempo de ejecución. En una migración permite cargar una aplicación nueva dentro de un shell existente sin unir los dos builds.
Términos relacionados
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn