Microfrontends: La Guía para Descomponer tu Frontend con Module Federation
Adéntrate en los microfrontends y aprende a escalar el desarrollo de tu frontend. Descubre qué son, cómo se diferencian de la arquitectura Multi-App, y cómo implementarlos en la práctica usando Webpack Module Federation para escalar equipos y despliegues independientes.
June 18, 2025

Joan Sebastian Oviedo
Ingeniero Informático

Microfrontends: La Guía para Descomponer tu Frontend con Module Federation
En el artículo anterior, exploramos la arquitectura Multi-App, una excelente estrategia para gestionar múltiples aplicaciones distintas bajo un mismo paraguas. Pero, ¿qué sucede cuando el problema no es tener muchas aplicaciones, sino que una sola aplicación se ha vuelto demasiado grande y monolítica?
Cuando tu portal de cliente (esa única y masiva aplicación de Next.js) se convierte en un gigante donde múltiples equipos (el de búsqueda, el de perfil, el de pagos) luchan por hacer cambios sin tropezarse, es hora de considerar un enfoque más granular: los Microfrontends.
¿Qué son Realmente los Microfrontends?
La analogía más simple y poderosa es: "Microfrontends son a los frontends lo que los microservicios son a los backends".
En lugar de construir una única y gran aplicación de frontend (un monolito), la arquitectura de microfrontends consiste en descomponer una aplicación en piezas más pequeñas, centradas en una funcionalidad de negocio, que pueden ser desarrolladas y desplegadas de forma independiente. Estas piezas se "ensamblan" en el navegador del cliente para crear una experiencia de usuario única y cohesiva.
Imagina una página de producto en un e-commerce:
- La galería de imágenes podría ser un microfrontend (MFE), propiedad del equipo-media.
- Las recomendaciones de "otros clientes también compraron" podrían ser otro MFE, propiedad del equipo-discovery.
- El botón de "Añadir al carrito" y el estado del carrito podrían ser un tercer MFE, del equipo-checkout.
Todos viven en la misma página y colaboran entre sí, pero cada uno tiene su propio ciclo de vida de desarrollo, pruebas y despliegue.
Ventajas: ¿Por Qué Asumir esta Complejidad?
Los microfrontends introducen una complejidad considerable, pero resuelven problemas muy específicos de escalado de equipos y desarrollo.
1. Equipos Verdaderamente Autónomos
Permiten que un equipo sea dueño de una funcionalidad de negocio de principio a fin, desde la base de datos hasta la interfaz de usuario. El equipo-discovery puede experimentar con un nuevo algoritmo de recomendación y desplegar su MFE sin necesidad de coordinarse con nadie más.
2. Despliegues Independientes y de Bajo Riesgo
Actualizar el MFE de la galería de imágenes es un despliegue pequeño, rápido y con un radio de impacto muy limitado. Se acabaron los "trenes de despliegue" donde todo el frontend se tiene que volver a probar y desplegar por un pequeño cambio.
3. Flexibilidad Tecnológica (con Precaución)
Un equipo podría construir su MFE con la última versión de React, mientras que otro podría usar Vue o Svelte. Advertencia: esta es una espada de doble filo. Aunque permite la innovación, puede llevar a una mala experiencia de usuario (descargando múltiples frameworks) y a una inconsistencia visual si no se gestiona con un Design System estricto.
4. Bases de Código Más Pequeñas y Mantenibles
Los desarrolladores trabajan en un código base más pequeño y enfocado, lo que facilita la comprensión, las pruebas y la incorporación de nuevos miembros al equipo.
Cómo Funcionan en la Práctica: Estrategias de Composición
La pregunta del millón es: ¿cómo se ensamblan estas piezas en el navegador?
Existen varias técnicas, pero la más moderna y robusta para aplicaciones complejas es la composición en el lado del cliente a través de un "App Shell" y Module Federation.
El App Shell (o Aplicación Contenedora): Es la primera pieza que se carga. Es un frontend mínimo cuya única responsabilidad es renderizar el layout general (header, footer, menú de navegación) y orquestar el montaje y desmontaje de los diferentes microfrontends según la ruta o el estado de la aplicación.
Webpack Module Federation: Esta es la tecnología que lo hace todo posible de una manera elegante. Es una funcionalidad de Webpack (y adoptada por otros bundlers) que permite que una aplicación JavaScript cargue dinámicamente código de otra aplicación (otro MFE) en tiempo de ejecución, como si fuera una dependencia más, pero sin la necesidad de instalarla en el node_modules y volver a empaquetar todo.
En la práctica, el App Shell dice: "Para la ruta /producto/:id, necesito cargar dinámicamente el código del MFE product-details desde su propia URL y montarlo en este div". Module Federation se encarga de que esto ocurra de forma eficiente, permitiendo incluso compartir dependencias (como React) para no cargarlas varias veces.
Cómo Afrontarlo como Dev: El Stack y la Mentalidad
Implementar microfrontends requiere un cambio de mentalidad y el dominio de nuevas herramientas.
1. Dominar Module Federation
Es el estándar de facto actual. Como desarrollador, necesitas entender cómo configurar el plugin de Module Federation en Webpack para "exponer" componentes de un MFE y "consumirlos" desde el App Shell u otro MFE.
2. Definir el "Contrato" de cada MFE
Cada microfrontend debe tener una API clara. El App Shell no debe saber cómo funciona internamente un MFE, solo debe saber cómo interactuar con él:
- Cómo montarlo (ej. mount(element, props)).
- Cómo desmontarlo (ej. unmount(element)).
- Qué props espera (ej. un productId).
3. Resolver la Comunicación Entre MFE
Este es uno de los mayores desafíos. Si el MFE del botón "Añadir al carrito" necesita avisar al MFE del header que el número de ítems ha cambiado, ¿cómo lo hace?
- Eventos Personalizados (Custom Events): Un MFE puede despachar un evento en el objeto window (ej. new CustomEvent('addToCart', { detail: { ... } })), y otros MFE pueden escuchar ese evento. Es una forma muy desacoplada.
- Estado en la URL: Para estado global, usar la URL es una estrategia RESTful y limpia.
- Librería de Estado Global (con cuidado): Usar un store como Redux o Zustand a nivel del App Shell, que los MFE puedan leer o al que puedan despachar acciones. Esto crea un acoplamiento, por lo que debe usarse con moderación.
4. El Design System es No Negociable
Si en la arquitectura Multi-App era importante, aquí es vital. Para que la aplicación no parezca un "Frankenstein" de interfaces, todos los MFE deben consumir la misma librería de componentes compartidos y los mismos design tokens (colores, fuentes, espaciado) de un Design System centralizado.
Conclusión: Los Microfrontends No Son una Bala de Plata
Los microfrontends son una solución poderosa para un problema muy específico: escalar el desarrollo de aplicaciones frontend muy grandes y complejas entre múltiples equipos autónomos. Resuelven un problema organizacional más que uno puramente técnico.
La sobrecarga que introducen en términos de infraestructura, tooling y complejidad de comunicación es significativa. No son la solución para aplicaciones pequeñas o medianas.