Mentionsy Mentionsy
Subiektywny Frontend
Subiektywny Frontend

Microfrontendy w module federation to kłamstwo!

06.11.2025 ·21 min 13 s

Odcinek opublikowany 07.03.2025Aleksander Lubych i Jakub Pawlak zapraszają na kolejną dawkę brutalnej prawdy o mikrofrontendach! Czy Module Federation to naprawdę złoty środek na mikrofrontendy? A może to po prostu kolejny sposób na stworzenie… rozproszonego monolitu? W tym odcinku obalamy największe mity na temat Module Federation i sprawdzamy, czy rzeczywiście daje nam prawdziwą niezależność zespołów i technologii. 🔥 O czym pogadamy? ✅ Jaką wizję mikrofrontendów miał Manfred Steyer w 2018 i jak to wygląda dzisiaj? ✅ Module Federation – czy to faktycznie mikrofrontendy? ✅ Problem wersjonowania frameworków i twardego couplingu ✅ Multi-repo kontra monorepo – dlaczego niezależność bywa iluzją? ✅ Jak uniknąć pułapek rozproszonego monolitu? W teorii miało być pięknie: niezależne zespoły, niezależne technologie, niezależne wdrażanie. W praktyce? No cóż… Jeśli pracujesz z mikrofrontendami (albo dopiero się do tego przymierzasz), ten odcinek może oszczędzić Ci wielu frustracji! 🚀 Gwiazda programu: https://module-federation.io/💬 Masz swoje doświadczenia z Module Federation? Jakie mieliście z tym problemy? Podziel się w komentarzu! 👍 Zostaw suba, jeśli chcesz więcej technicznych deep dive’ów! #MicroFrontends #ModuleFederation #Angular #Frontend #RozproszonyMonolit #Programowanie #SubiektywnyFrontend #IT #Monorepo #MultiRepo

Z samą technologią jest wszystko ok, ona spełnia swoje założenia. To jest potęga. To jest potęga, to jest super fajne. Ale niesie to za sobą też pewne ograniczenia, czy narzuca pewne rozwiązania. Jakub, błagam, powiedz o co chodzi, bo już tak ciągniemy ten temat. Monorepo. No właśnie, bo jakby module federation, to ja bym powiedział, że to trochę jest synonim do monorepo. Jeśli chcemy, to może nie. No tak, a to wynika z czego? Ano z tego, że chociażby musimy mieć jedną wersję frameworka, bo inaczej nam się kiełbasi strasznie aplikacja. No właśnie, bo weźmy sobie Angulara. Ale jeszcze muszę dodać taką jedną rzecz, bo tutaj byłbym od razu zhejtowany, że jestem nieprecyzyjny, bo my mówimy też o module federation w takim wydaniu, jak Enix proponuje, że po prostu robimy lazy loading komponentów.

I to, jak definiujesz i to, że musisz mieć routing na przykład tych Microfrontendach i ten routing jakoś porzenić, bo tak teraz zacząłem sobie myśleć o tych web-komponentach i tym POC, które robiliśmy u nas i po prostu się zawiesiłem, Jakub. No bo to jest właśnie skomplikowany temat, bo module federation samo w sobie jest do ładowania i lazy-loadowania i share'owania paczek. Ale możemy to użyć też w różnych kontekstach. A musi być coś, co to orkiestruje i coś, co tym zarządza i tym routingiem zarządza, więc tam są jeszcze inne aspekty tego systemu mikrofrontendowego. Ale wracając do clou. Monorepo, coupling na poziomie wersji frameworka. Wyobraźmy sobie, że jesteśmy w Angularze. No w React'cie jest dokładnie tak samo.

Jesteś zależny od tej wersji, w której jest twój shell, czyli ten host, który serwuje te Microfrontendy. No i teraz nie masz szansy, żeby zaserwować jakąkolwiek inną wersję, przez co pójście w multi repo jest poniekąd trochę strzałem w kolano, ponieważ upgrade frameworka wtedy robi się niezwykle bolesny. Więc zostajesz przy Monorepo przeważnie. Tak. I ja bym powiedział, że po prostu module federation w Monorepo daje super możliwości, jeśli chodzi o czas i szybkość developmentu i performance, właśnie optymalizację samej aplikacji.

I to jest super perfekcyjna para. Bardzo fajnie to działa. Ale w momencie, jak zaczynamy działać z module federation i wchodzimy w multirepo, No to jest bolesne przeżycie. Tak się nie robi. To znaczy, to właśnie jest takie pozorne unikanie zależności, że mamy trochę Microfrontendy, ale jak robimy update jakiejś biblioteki, no to zróbmy ją wszyscy razem, wszyscy razem za rękę, weźmy te wszystkie nasze 20-50 repozytoriów. Uhu, niezależność! Tak, tak, tak. Dlatego module federation jakby w tym setupie z Monorepo, który Elnix promuje, jest bardzo fajny. To działa. I można module federation użyć też w różnych kontekstach.

To znaczy właśnie z webpackiem, może... Przepraszam, z webkomponentami, to miałem na myśli. Można też single spa. Ale chciałem dodać jeszcze inną bardzo ważną rzecz, żeby to była jasność dla wszystkich. Da się uzyskać niezależność i autonomię przy module federation i monorepo. Tylko trzeba mieć pewne inne rzeczy, w tym Monorepo, takie jak code owners. Prawdopodobnie też musisz mieć jakiś wyższy poziom test automation, czyli pokrycie testów. I na przykład jeszcze jakiś trunk-based. Bez trunk-based będzie ciężko, bo dalej gdzieś tam trzeba się synchronizować, a jak jest trunk-based, to lecimy zarazem do jednego brancha.

Zakrywam się. To jest dzisiaj jakoś ciężko, dzisiaj jestem polskim. Ciężko. Ukrywamy się za feature-toggle'em, no i tak naprawdę mamy czystą... Sytuację sterujemy tą widocznością przez Feature Toggle. I tak można uzyskać tą niezależność, ale to nie zawsze jest takie proste. Szczególnie jeżeli masz monorepo, które było rozwijane bez trunk base od samego początku i bez właśnie Feature Toggle i są jakieś pewne naleciałości. Stąd ta decyzja z tym module federation przy Microfrontendach musi być świadoma. Jak byśmy to mogli podsumować z tymi mikrofrontendami i module federation?

Bo my tak sobie rozmawialiśmy o alternatywach i tak dalej, ale ja bym powiedział, że to są takie trochę nie alternatywy do module federation, tylko alternatywy do sposobu ładowania mikrofrontendów i samo module federation jakby nie stanowi żadnej przeszkody i jakby dalej możemy to używać. Tak jak wcześniej powiedzieliśmy, że to jest doskonałe narzędzie. Tak, ja bym właśnie to tak podsumował w takim jakby przeglądzie tego, jak możemy to module federation, do czego to zapiąć i możemy właśnie użyć web komponentów, single SPA, możemy robić takie lazy loadowane moduły, to też jest ok, ale wtedy musimy mieć monorepo, a możemy też użyć iframe'ów. No właśnie. I tutaj chciałem pozdrowić Jurka, mojego kolegę, który, nie wiem czy to było 8 lat temu, jeszcze w poprzedniej pracy, pracował nad taką fajną aplikacją, gdzieś tam jakiś Dashboard, drag and drop, ale mieli tam iFrame'y, mieli jakiś Event Bus i tak mi o tym opowiada i mówię, no ale to w sumie to tak wszystko brzmi jak Microfrontendy.

Bardzo ważna rzecz, że pamiętajcie też o tym, że monorepo samo w sobie jest potęgą i my tutaj nie hejtujemy tego. I ja przynajmniej nie hejtuję tego. To, że mamy takie wymuszenie w module federation na to, że to jest single version frameworku, to jest moim zdaniem też bardzo dobra rzecz, bo problemy skalowalności są gdzie indziej. Tak jak wcześniej mówiliśmy, można zorganizować sobie tak monorepo, że będziesz miał tą niezależność, a Jakby nie jest to konieczne, żeby iść multi repo, stąd single version jest bardzo dobre, bo no po prostu macie najnowsze, załóżmy, że robicie upgrade, macie to ujednolicone od razu we wszystkich, na wszystkich aplikacjach.

No i na przykład ktoś wykona robotę za was, na przykład taki platformowy team, który zrobi update całego frameworka na całe monorepo. No i dobre! To, co chciałem zaznaczyć, to jest to, że module federation jako taki byt, który rozwiązuje wszystkie problemy, które niby oferują mikrofrontendy, no to trzeba z tym uważać i po prostu pamiętać o tym, co jest najważniejsze w tym setupie mikrofrontendowym i tego, czego odczujemy. W setupie waszym mikrofrontendowym. Oj, to jest super ważna rzecz, bo nasz setup nie jest waszym setupem. Jakub, właśnie to jest bardzo ciekawe, że co ja przechodzę z organizacji do organizacji, z firmy na firmę, każdy te microfrontendy robi po swojemu i każdy robi to pod siebie.

Pokazano wszystkie 9 dopasowań. Transkrypcja generowana automatycznie i niesprawdzana ręcznie — może zawierać błędy.