Metro
Metro Module Federation lleva la potencia de una arquitectura distribuida al desarrollo móvil con React Native.
Descripción general
La implementación de Module Federation para React Native usa una integración personalizada con el bundler Metro que permite:
- Arquitectura micro-frontend para apps React Native
- Compartir código entre varias aplicaciones React Native
- Despliegue independiente de los módulos de la aplicación
- Carga de módulos en runtime para actualizaciones dinámicas
Nota: El soporte de Module Federation para el bundler Metro todavía es experimental y puede que le falten algunas funcionalidades o ciertas integraciones. Los proyectos o bibliotecas que dependen de configuraciones personalizadas de Metro todavía no están soportados y puede que no funcionen.
Paquetes
El ecosistema de Module Federation para React Native se compone de varios paquetes:
@module-federation/metro- Integración principal con Metro para habilitar Module Federation@module-federation/metro-plugin-rnc-cli- Integración con React Native CLI@module-federation/metro-plugin-rock- Integración con Rock@module-federation/metro-plugin-rnef- Integración con RNEF (obsoleto; usametro-plugin-rocken su lugar)
Instalación
Instala los paquetes necesarios en tu proyecto React Native con tu gestor de paquetes preferido:
Configuración
Envuelve tu configuración de Metro con la función withModuleFederation para habilitar Module Federation. Debes envolver con este hook la configuración de Metro de todos los módulos federados: la aplicación host y las mini aplicaciones.
Configurar el límite asíncrono de la app
Envuelve el componente App principal con withAsyncStartup para habilitar el runtime de Module Federation. Esto crea un límite asíncrono que garantiza que el runtime de Module Federation esté correctamente inicializado antes de que se renderice el componente de tu app.
La función withAsyncStartup:
- Espera a que se inicialice el runtime de Module Federation antes de renderizar tu app
- Usa React Suspense para gestionar la carga asíncrona
- Acepta un componente de fallback opcional que se muestra durante la inicialización
Patrones de uso
Aplicación host
Una aplicación host consume módulos remotos de otras aplicaciones:
Aplicación remote (mini app)
Una aplicación remote expone módulos que pueden consumir las aplicaciones host:
Comandos de la CLI
La integración con React Native CLI proporciona comandos adicionales para empaquetar aplicaciones federadas:
Empaquetar un host de Module Federation
Empaqueta una aplicación host que consume módulos remotos:
Empaquetar un remote de Module Federation
Empaqueta una aplicación remote (mini app) que expone módulos:
Ambos comandos admiten las mismas opciones que el comando estándar react-native bundle.
Nota: Estos comandos los proporciona el paquete
@module-federation/metro-plugin-rnc-cli.
Integración con Rock
En proyectos que usan Rock (antes RNEF), añade el plugin de Module Federation a tu rock.config.mjs:
Nota: Si estás migrando desde RNEF, sustituye
@module-federation/metro-plugin-rnefpor@module-federation/metro-plugin-rocky renombrarnef.config.mjsarock.config.mjs. Consulta el README de metro-plugin-rock para ver todos los detalles de la migración.
Referencia de la API
withModuleFederation(metroConfig, federationConfig, options?)
Envuelve tu configuración de Metro para habilitar Module Federation.
Parámetros
metroConfig(MetroConfig) - Tu configuración de Metro existentefederationConfig(FederationConfig) - Configuración de Module Federationoptions(Options) - Configuración opcional para funcionalidades experimentales
Interfaz FederationConfig
Interfaz SharedConfig
Avisos de opciones no soportadas
Actualmente Metro solo admite un subconjunto de las opciones de configuración comunes de Module Federation. Cuando se proporcionan opciones no soportadas, Metro emite avisos durante la validación indicando que esas opciones no están soportadas y no tendrán ningún efecto.
Usa runtimePlugins para las rutas de los plugins de runtime.
plugins está obsoleto y se eliminará en la próxima versión mayor.
Ejemplos y buenas prácticas
La configuración sigue el formato de configuración estándar de Module Federation. Para obtener información completa sobre los conceptos, las opciones de configuración y los patrones de uso de Module Federation, consulta la documentación oficial de Module Federation.
Para ver ejemplos funcionales y guías de implementación detalladas, echa un vistazo al repositorio de Module Federation para Metro, que incluye varias aplicaciones de ejemplo que muestran distintos patrones de uso e integraciones.