0Pricing
React Academy · Lección

Configuración de aplicaciones React host y remotas

Configure exposes, remotes y dependencias compartidas en webpack.config.js para un shell host y dos aplicaciones React remotas.

Configuración de aplicaciones React host y remotas es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

webpack.config.js del remote: ModuleFederationPlugin

La aplicación remote añade ModuleFederationPlugin a su configuración de webpack con tres propiedades clave: name (identificador único, por ejemplo, "buttonApp"), filename ("remoteEntry.js", la salida del manifiesto) y exposes (un mapa del nombre público a la ruta del archivo fuente).

Exponer componentes desde el remote

La configuración exposes asigna una ruta de módulo pública a un archivo local: { './Button': './src/Button' }. Esto significa que el host puede importar 'buttonApp/Button' y recibir el componente de ./src/Button.tsx. Puede exponer varios componentes, utilidades o incluso páginas completas.

Configuración de elementos compartidos en el remote

La propiedad shared indica a Module Federation qué módulos deben compartirse entre el host y el remote en lugar de duplicarse. Para React: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true evita que se carguen varias instancias simultáneamente.

webpack.config.js del host: hacer referencia a los remotes

La configuración de ModuleFederationPlugin de la aplicación host incluye una propiedad remotes: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. La clave es el espacio de nombres de importación y el valor combina el nombre y la URL del remote mediante @, lo que indica a Webpack dónde obtener el remote en tiempo de ejecución.

Consumir el remote en React

En el código React del host, importe el componente remoto mediante una importación dinámica: const Button = React.lazy(() => import('buttonApp/Button')). La ruta de importación coincide con el espacio de nombres del remote y el nombre del módulo expuesto. React.lazy divide la importación en un chunk y la carga de forma asíncrona.

Envolver con Suspense

Como los módulos remotos se cargan de forma asíncrona, envuelva siempre el componente remoto importado de forma diferida en un límite Suspense: Suspense fallback=Loading... /. El fallback se muestra mientras Module Federation obtiene remoteEntry.js y el chunk del componente desde la URL del remote.

Por qué los singletons son fundamentales

Los hooks de React (useState, useContext, useEffect) dependen de una única instancia interna de React para realizar el seguimiento del estado de los componentes. Si tanto el host como el remote cargan su propia copia de React, los hooks producirán errores de "invalid hook call". singleton:true obliga a ambos a compartir una única instancia de React, lo que resuelve por completo esta clase de errores.

Resolución de conflictos de versiones

Cuando el host utiliza react@18.2.0 y el remote utiliza react@18.3.0, el ámbito compartido de Module Federation negocia qué versión se debe utilizar. Con singleton:true y requiredVersion, normalmente utiliza la versión superior si es compatible. Establecer requiredVersion: '>=18.0.0' en lugar de una versión fijada permite usar rangos de versiones flexibles.

TypeScript: declaraciones de módulos

TypeScript no conoce los módulos remotos en tiempo de compilación, por lo que las importaciones como import('buttonApp/Button') producirán errores de tipos si no hay declaraciones. Utilice @module-federation/typescript o cree manualmente archivos .d.ts que declaren los tipos de los módulos, para disponer de seguridad de tipos en las props de los componentes remotos.

Probar la configuración localmente

Ejecute ambas aplicaciones simultáneamente: el remote en el puerto 3001 y el host en el puerto 3000. Abra el host: su runtime de Module Federation obtendrá http://localhost:3001/remoteEntry.js, descubrirá el módulo Button, descargará su chunk y lo renderizará dentro de la aplicación host como si fuera un componente local.

Configuración de la URL de producción

En producción, sustituya localhost:3001 por la URL del remote desplegado. Un patrón habitual consiste en utilizar una variable de entorno para la URL del remote, de modo que CI/CD pueda inyectar la URL correcta para cada entorno: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.

Módulos compartidos singleton

¿Por qué se debe configurar React como singleton en la configuración shared de Module Federation?

Resumen de la lección

Configurar Module Federation requiere ModuleFederationPlugin tanto en el remote (con name, filename y exposes) como en el host (con remotes). Consuma los componentes remotos mediante React.lazy + importación dinámica envueltos en Suspense. React y React DOM deben ser singletons compartidos para evitar errores de hooks causados por varias instancias. Las declaraciones de TypeScript y las URL de remotes configuradas mediante variables de entorno completan una configuración lista para producción.

Preguntas frecuentes

¿La lección «Configuración de aplicaciones React host y remotas» es gratis?

Sí — el texto completo de «Configuración de aplicaciones React host y remotas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Configuración de aplicaciones React host y remotas»?

Configure exposes, remotes y dependencias compartidas en webpack.config.js para un shell host y dos aplicaciones React remotas. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Configuración de aplicaciones React host y remotas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Module Federation: importaciones dinámicas en tiempo de ejecución
  2. Configuración de aplicaciones React host y remotas
  3. Compartir estado y enrutamiento entre remotos
  4. Control de versiones, despliegue y orquestación
← Volver a React Academy