ADR 001: Module Federation v2 para composicion de micro frontends
Estado: Aceptado Fecha: 2025-03-15 Ultima actualizacion: 2026-02-26
Contexto
Necesitamos una estrategia de composicion en runtime para 5-10 micro frontends que permita despliegue independiente, gestion compartida de dependencias y carga dinamica.
Decision
Usar Module Federation 2.0.1 estable (@module-federation/enhanced ^2.0.1) con Rsbuild/Rspack. El plugin @module-federation/rsbuild-plugin (^2.0.1) se usa para la integracion con Rsbuild. Nota: la version del paquete npm ahora se alinea con la denominacion arquitectonica "v2" -- las versiones 2.0.x representan la release estable de lo que anteriormente se identificaba con versiones pre-release 0.x.
Dependencias clave
@module-federation/enhanced: ^2.0.1@module-federation/rsbuild-plugin: ^2.0.1react: ^19.2.4 (singleton compartido)
Consecuencias
Positivas
- Composicion en runtime: no requiere coordinacion en build-time entre MFEs
- Negociacion de dependencias compartidas (React ^19.2.4 como singleton)
- Carga dinamica de remotes via runtime API
- Generacion de tipos TypeScript entre repositorios
- Protocolo mf-manifest.json para negociacion de versiones
- Plugin de Chrome DevTools para depuracion
- Desarrollo activo y ecosistema en crecimiento
Negativas
- Curva de aprendizaje mas pronunciada que enfoques mas simples (import maps)
- La depuracion de problemas con dependencias compartidas puede ser compleja
- Limitaciones de HMR entre boundaries de remotes
- La compatibilidad con pnpm requiere configuracion cuidadosa (hoisting en .npmrc)
- Bugs de postfix de version en la resolucion de dependencias compartidas
Alternativas consideradas
- single-spa: Agnostico de framework pero con setup mas complejo, menos maduro en comparticion de dependencias, requiere un servicio personalizado de import map. MF 2.0.1 gestiona la comparticion de dependencias de forma nativa.
- qiankun (basado en single-spa): Bueno para integracion con legacy pero excesivo para una plataforma solo React. Menor soporte del ecosistema fuera del mercado chino.
- Import maps nativos: Simple pero sin gestion de dependencias compartidas, sin type safety, sin protocolo de manifest. Requeriria construir todas estas funcionalidades desde cero.
- Webpack Module Federation v1: Carece de runtime API, sin registro dinamico de remotes, sin protocolo de manifest, sin generacion de tipos.