Micro-Frontends: Revolutionizing Frontend Development

Rate this content
Bookmark

Reutilizar características de front-end construidas por diferentes equipos puede ser un desafío dependiendo del enfoque elegido. Si usamos una biblioteca, ¿qué pasa con el versionado y el mantenimiento? Si usamos un monolito, ¿qué pasa con los tiempos de construcción? Podemos encontrar una solución pragmática en Module Federation, no solo para compartir características sino también para dividir y conquistar. Únete a mí en esta charla para discutir las últimas actualizaciones de Module Federation, la seguridad de tipos, analizar sus desafíos y revisar un caso real donde aplicamos esta solución para compartir proveedores, hooks, características y problemas interesantes que enfrentamos en el camino.

This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.

Nataly Rocha
Nataly Rocha
7 min
18 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Los micro-frontends descomponen un gran frontend en piezas más pequeñas e independientemente desplegables. Este enfoque mejora la escalabilidad, la autonomía del equipo y el mantenimiento del código. Las dos formas principales de implementar micro-frontends son en tiempo de construcción y en tiempo de ejecución. Module Federation, introducido en Webpack 5, permite actualizaciones dinámicas en tiempo real entre equipos. Los desafíos en la implementación de micro-frontends incluyen obtener seguridad de tipos con TypeScript y probar en tiempo de ejecución. Module Federation 2.0 introdujo la extracción de tipos y actualizaciones de manifiestos. La federación de sitios completos permite probar toda la aplicación. Los micro-frontends implican compensaciones, así que elige lo que más te beneficie.
Available in English: What’s With Micro Frontends

1. Micro-frontends and Module Federation

Short description:

Los micro-frontends descomponen un gran frontend en piezas más pequeñas e independientemente desplegables. Este enfoque mejora la escalabilidad, la autonomía del equipo y el mantenimiento del código. Las dos formas principales de implementar micro-frontends son en tiempo de compilación y en tiempo de ejecución. La federación de módulos, introducida en Webpack 5, permite actualizaciones dinámicas en tiempo real entre equipos.

♪♪♪ Hola a todos. Bienvenidos a esta charla relámpago. Primero que nada, gracias a JS Nation por este espacio. Es realmente genial estar aquí. Mi nombre es Natalia Rocha. Soy de Ecuador, un pequeño y hermoso país donde la política tiene más errores que el código heredado. Trabajo en Stack Builders como desarrolladora de software, y también toco la guitarra.

Pero entremos en el tema, micro-frontends. Así que tengo la sensación de que este tema, cuando se menciona, crea mucho revuelo y discusión. Así que hablemos un poco sobre ello y qué papel juega la federación de módulos en su implementación.

En pocas palabras, un micro-frontend es una arquitectura que descompone un gran frontend como este en piezas más pequeñas que son independientemente desplegables. Aquí está la clave, independientemente desplegables. Probablemente sea la idea central de los micro-frontends. Pero ¿por qué el revuelo? Porque este enfoque está ganando mucha tracción porque puede mejorar la escalabilidad, la autonomía del equipo y el mantenimiento del código. Así que en lugar de esperar a que un equipo termine la función para poder desplegar toda la aplicación, cada modelo está aislado, es flexible, y puede implementarse de manera independiente.

Así que tenemos dos formas principales de implementar micro-frontends, en tiempo de compilación y en tiempo de ejecución. En tiempo de compilación, donde los modelos se compilan juntos en tiempo de compilación, bibliotecas, por ejemplo, y en tiempo de ejecución, donde los modelos se cargan independientemente durante el tiempo de ejecución. La federación de módulos es un ejemplo de esta implementación, que es excelente para actualizaciones dinámicas en tiempo real entre equipos.

Entonces, ¿son nuevos los micro-frontends? Veamos. ¿Alguien ha usado iframes antes? ¿Sí? ¿Alguien ha usado bibliotecas antes? ¿Sí? Entonces tal vez hayas implementado una arquitectura de micro-frontend. Pero ¿cuándo llamarías a una biblioteca o un iframe un micro-frontend? Porque a diario, todos usamos bibliotecas para agregar funcionalidades, utilidades, incluso marcos completos a nuestras aplicaciones. Así que me gusta pensar que la arquitectura o el modelo mental que defines para tu proyecto y el caso de uso de cómo pretendes separar la aplicación en una biblioteca o un iframe o un modelo federado es lo que lo convierte en un micro-frontend. Por ejemplo, en una aplicación de cine, los equipos desarrollan por separado un modelo de selección de asientos y de perfil de usuario. Así que esto les da la posibilidad de trabajar de manera independiente, teniendo la oportunidad de moverse más rápido, para bien o para mal. ¿Verdad?

Ahora saltemos un poco a la implementación. La federación de módulos es una forma de implementar esta arquitectura. Así que te permite exponer módulos como funciones, componentes, hooks, y usarlos como remotos que se cargarán en tiempo de ejecución. Fue introducido en Webpack 5. Zach Jackson, el creador, debería estar por aquí. Y la versión 2.0 fue lanzada este año.

2. Challenges, Testing, and Wrap-up

Short description:

Tuvimos un caso de uso llamado el patrón de estrangulamiento, donde construimos una nueva aplicación utilizando características de otra aplicación. Los desafíos incluyeron obtener seguridad de tipos con TypeScript y probar en tiempo de ejecución. La federación de módulos 2.0 introdujo la extracción de tipos y actualizaciones de manifiestos. La federación de sitios completos permite probar toda la aplicación. Los micro-frontends implican compensaciones, así que elige lo que más te beneficie.

Un caso de uso real que tuvimos, al que me gustaría llamar el patrón de estrangulamiento, nos permitió construir una nueva aplicación con características de usuario de otra aplicación que estaba programada para ser descontinuada. Así que esto nos ayudó a movernos de manera independiente mientras manteníamos la opción de intercambiar aplicaciones en el futuro. Y ese es el caso de uso donde lo encontramos realmente valioso.

Pero enfrentamos varios desafíos. Usamos TypeScript. Entonces, como los modelos se cargan en tiempo de ejecución desde un manifiesto, ¿cómo obtenemos seguridad de tipos en el desarrollo? Bueno, eliminamos el TypeScript. No, es broma. Extraímos los tipos. Y también la federación de módulos 2.0 introdujo la posibilidad de extraer los tipos de los modelos federados. Lo hace automáticamente. Y ahora pueden ser parte de los activos que se exponen en el manifiesto. Así que cuando declaras un modelo como remoto, el complemento descarga automáticamente los tipos y puedes usarlos como una ruta de respaldo y tendrás todos los beneficios de TypeScript en tu proyecto.

También las pruebas. ¿Cómo pruebas algo que se consume en tiempo de ejecución? Puede volverse desafiante. Así que, lo mismo. Eliminamos las pruebas. Hay varios enfoques que podemos usar para esto. Y, por ejemplo, las responsabilidades de prueba deben mantenerse para cada micro frontend, evitando la superposición, y también manteniéndolos lo más desacoplados posible para facilitarte la vida. También tener pruebas A-B, que es algo que hicimos. Por ejemplo, tener un módulo que solo tiene lo básico que se necesita para probar la funcionalidad cruzada y tener otro que esté completamente equipado para Prov. Las herramientas de desarrollo que incluyó la federación de módulos 2.0 y también las actualizaciones de manifiestos ayudan mucho aquí porque puedes cargar diferentes manifiestos inmediatamente para cambiar y probar varios enfoques sin tiempo.

También existe este concepto de federación de sitios completos donde realmente puedes ver la aplicación como un todo. Por ejemplo, cuando solo estabas desarrollando el selector de semillas, es incómodo ver solo esa experiencia. Así que lo que haces es exportar también el host y crear una dependencia circular para que puedas ver toda la aplicación. Así que puedes probar la funcionalidad de toda la aplicación. También enfrentamos más desafíos. Por ejemplo, rendimiento, estilo, gestión de etapas y otros. Así que voy a hacer una charla completa sobre esto en la fecha remota. Te invito a unirte si puedes.

Pero por hoy, para concluir, me gustaría dejarte con este mensaje. ¿Deberías lanzarte a los micro frontends de inmediato? Si los desafíos de escalabilidad y despliegues independientes resuenan contigo, creo que vale la pena explorarlo. Y también es bastante útil encontrar el caso de uso o la solución que necesitas en todos estos diferentes enfoques que te dan los micro frontends. Además, al encontrar el enfoque de micro frontend a usar, descubrirás que todo es una compensación. Y tendrás que elegir el que más te beneficie. Esta es una frase que surgió mucho en nuestras discusiones de equipo. Y por cierto, me gustaría dar un gran agradecimiento a mi equipo, los range vendors. No puedo agradecerles lo suficiente por todo su conocimiento compartido y profesionalismo. Y eso es todo. Espero que sigas disfrutando de la conferencia, y nos vemos por ahí.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Escalando con Remix y Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Escalando con Remix y Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
De Monolito a Micro-Frontends
React Advanced 2022React Advanced 2022
22 min
De Monolito a Micro-Frontends
Top Content
Microfrontends are considered as a solution to the problems of exponential growth, code duplication, and unclear ownership in older applications. Transitioning from a monolith to microfrontends involves decoupling the system and exploring options like a modular monolith. Microfrontends enable independent deployments and runtime composition, but there is a discussion about the alternative of keeping an integrated application composed at runtime. Choosing a composition model and a router are crucial decisions in the technical plan. The Strangler pattern and the reverse Strangler pattern are used to gradually replace parts of the monolith with the new application.
Micro-Frontends con React y Federación de Módulos Vite
React Advanced 2023React Advanced 2023
20 min
Micro-Frontends con React y Federación de Módulos Vite
Top Content
Microfrontends is an architecture used by big companies to split monolithic frontend applications into manageable parts. Maintaining a consistent look and feel across different microfrontends is a challenge. Sharing styles can be done through Vanilla CSS, CSS modules, or CSS in JS. JavaScript variables can be used in styles, but readability and runtime overhead are considerations. Sharing state in microfrontends can be achieved through custom events, broadcast channels, shared state managers, or custom PubSub implementations. Module federation with Vite allows for client composition and sharing dependencies. Configuration is similar to Webpack, and future work includes working on the QUIC framework.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
This Talk discusses the transition from a PHP monolith to a federated micro-frontend setup at Personio. They implemented orchestration and federation using Next.js as a module host and router. The use of federated modules and the integration library allowed for a single runtime while building and deploying independently. The Talk also highlights the importance of early adopters and the challenges of building an internal open source system.
“Microfrontends” para móviles en React Native
React Advanced 2023React Advanced 2023
24 min
“Microfrontends” para móviles en React Native
Top Content
Micro frontends are an architectural style where independent deliverable frontend applications compose a greater application. They allow for independent development and deployment, breaking down teams into feature verticals. React Native's architecture enables updating the JavaScript layer without going through the app store. Code Push can be used to deploy separate JavaScript bundles for each micro frontend. However, there are challenges with managing native code and dependencies in a micro frontend ecosystem for mobile apps.
Compartir es Cuidar: ¿Cómo Deberían los Micro Frontends Compartir Estado?
React Summit 2022React Summit 2022
23 min
Compartir es Cuidar: ¿Cómo Deberían los Micro Frontends Compartir Estado?
Top Content
Micro-frontends allow development teams to work autonomously and with less friction and limitations. Organizing teams around business concerns, in alignment with subdomains, rather than technical concerns, can lead to software that is split nicely and user stories falling under the responsibility of a single team. Having a logical backup or reference point is important for implementing microfrontends without breaking their isolation. Microfrontends can communicate with each other using the window object and custom events. Microfrontends should be kept isolated while maintaining communication through various approaches.

Workshops on related topic

Micro Frontends with Module Federation and React
JSNation Live 2021JSNation Live 2021
113 min
Micro Frontends with Module Federation and React
Top Content
Workshop
Alex Lobera
Alex Lobera
¿Alguna vez trabajaste en una aplicación monolítica de Next.js? Yo sí, y escalar una gran aplicación de React para que muchos equipos puedan trabajar simultáneamente no es fácil. Con micro frontends, puedes dividir un monolito de frontend en piezas más pequeñas para que cada equipo pueda construir y desplegar de manera independiente. En este masterclass, aprenderás cómo construir grandes aplicaciones de React que escalen utilizando micro frontends.
Microfrontends con Module Federation y Angular
JSNation Live 2021JSNation Live 2021
113 min
Microfrontends con Module Federation y Angular
Workshop
Manfred Steyer
Manfred Steyer
Cada vez más empresas eligen Microfrontends. Sin embargo, no son fáciles de implementar. Afortunadamente, Module Federation introducido con webpack 5 ha iniciado un cambio crucial de dirección.
En este masterclass interactivo, aprenderás de Manfred Steyer, Angular GDE y Colaborador de Confianza en el equipo de Angular, cómo planificar e implementar arquitecturas de Microfrontend con Angular y el nuevo Module Federation de webpack. Hablaremos sobre compartir bibliotecas y conceptos avanzados como manejar desajustes de versión, Module Federation dinámico e integración en monorepos.
Después de los ejercicios individuales, tendrás un estudio de caso que podrás utilizar como plantilla para tus proyectos. Este masterclass te ayuda a evaluar las opciones individuales para tus proyectos.
Prerrequisitos:Debes tener algo de experiencia con Angular.