Konfiguracja aplikacji React hosta i aplikacji zdalnych
Skonfigurują Państwo exposes, remotes i współdzielone zależności w webpack.config.js dla powłoki hosta oraz dwóch zdalnych aplikacji React.
Konfiguracja aplikacji React hosta i aplikacji zdalnych to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
remote webpack.config.js: ModuleFederationPlugin
Aplikacja remote dodaje ModuleFederationPlugin do swojej konfiguracji Webpacka, podając trzy kluczowe właściwości: name (unikatowy identyfikator, np. "buttonApp"), filename ("remoteEntry.js" — plik wyjściowy manifestu) oraz exposes (mapowanie nazwy publicznej na ścieżkę pliku źródłowego).
Udostępnianie komponentów z remote
Konfiguracja exposes mapuje publiczną ścieżkę modułu na plik lokalny: { './Button': './src/Button' }. Oznacza to, że host może zaimportować 'buttonApp/Button' i otrzyma komponent z ./src/Button.tsx. Można udostępniać wiele komponentów, narzędzi pomocniczych, a nawet całe strony.
Konfiguracja współdzielenia w remote
Właściwość shared informuje Module Federation, które moduły powinny być współdzielone między hostem a remote, zamiast ładowania ich wielu kopii. W przypadku Reacta: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true zapobiega jednoczesnemu ładowaniu wielu instancji.
host webpack.config.js: odwoływanie się do remotes
Konfiguracja ModuleFederationPlugin w aplikacji hosta zawiera właściwość remotes: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. Klucz jest przestrzenią nazw importu, a wartość łączy nazwę remote i jego adres URL za pomocą @ — informując Webpack, skąd pobrać remote w czasie działania.
Korzystanie z remote w React
W kodzie Reacta hosta należy zaimportować zdalny komponent za pomocą dynamicznego importu: const Button = React.lazy(() => import('buttonApp/Button')). Ścieżka importu odpowiada przestrzeni nazw remote i nazwie udostępnionego modułu. React.lazy dzieli kod importu na chunki i ładuje go asynchronicznie.
Opakowywanie za pomocą Suspense
Ponieważ moduły remote są ładowane asynchronicznie, zdalny komponent importowany z użyciem lazy należy zawsze umieścić w granicy Suspense: Suspense fallback=Loading... /. Fallback jest renderowany podczas pobierania przez Module Federation pliku remoteEntry.js i chunka komponentu z adresu URL remote.
Dlaczego singletony mają kluczowe znaczenie
Hooki Reacta (useState, useContext, useEffect) wymagają jednej wewnętrznej instancji Reacta do śledzenia stanu komponentów. Jeśli zarówno host, jak i remote załadują własną kopię Reacta, hooki zgłoszą błędy "invalid hook call". singleton:true wymusza współdzielenie jednej instancji Reacta, całkowicie rozwiązując tę klasę problemów.
Rozwiązywanie konfliktów wersji
Gdy host korzysta z react@18.2.0, a remote z react@18.3.0, współdzielony zakres Module Federation uzgadnia wersję do użycia. Przy ustawieniach singleton:true i requiredVersion zazwyczaj używana jest wyższa wersja, jeśli jest zgodna. Ustawienie requiredVersion: '>=18.0.0' zamiast przypiętej wersji pozwala korzystać z elastycznych zakresów wersji.
TypeScript: deklaracje modułów
TypeScript nie zna modułów remote w czasie kompilacji, dlatego importy takie jak import('buttonApp/Button') bez deklaracji powodują błędy typów. Należy użyć @module-federation/typescript lub ręcznie utworzyć pliki .d.ts deklarujące typy modułów, aby zapewnić bezpieczeństwo typów dla właściwości zdalnych komponentów.
Lokalne testowanie konfiguracji
Należy uruchomić obie aplikacje jednocześnie: remote na porcie 3001, a hosta na porcie 3000. Po otwarciu hosta środowisko uruchomieniowe Module Federation pobierze http://localhost:3001/remoteEntry.js, znajdzie moduł Button, pobierze jego chunk i wyrenderuje go w aplikacji hosta tak, jakby był komponentem lokalnym.
Konfiguracja adresu URL w środowisku produkcyjnym
W środowisku produkcyjnym należy zastąpić localhost:3001 adresem URL wdrożonego remote. Często stosuje się zmienną środowiskową dla adresu URL remote, aby CI/CD mogło wstrzyknąć właściwy adres dla danego środowiska: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.
Współdzielone moduły typu singleton
Dlaczego React musi być skonfigurowany jako singleton we współdzielonej konfiguracji Module Federation?
Podsumowanie lekcji
Konfiguracja Module Federation wymaga użycia ModuleFederationPlugin zarówno po stronie remote (z właściwościami name, filename i exposes), jak i hosta (z właściwością remotes). Zdalne komponenty należy pobierać za pomocą React.lazy i dynamicznego importu opakowanych w Suspense. React i React DOM muszą być współdzielonymi singletonami, aby zapobiec błędom hooków wynikającym z wielu instancji. Deklaracje TypeScript oraz adresy URL remote przechowywane w zmiennych środowiskowych dopełniają konfigurację gotową do użycia w produkcji.
Często zadawane pytania
Czy lekcja „Konfiguracja aplikacji React hosta i aplikacji zdalnych” jest bezpłatna?
Tak — pełny tekst „Konfiguracja aplikacji React hosta i aplikacji zdalnych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Konfiguracja aplikacji React hosta i aplikacji zdalnych”?
Skonfigurują Państwo exposes, remotes i współdzielone zależności w webpack.config.js dla powłoki hosta oraz dwóch zdalnych aplikacji React. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Konfiguracja aplikacji React hosta i aplikacji zdalnych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Module Federation: dynamiczne importy w czasie działania
- Konfiguracja aplikacji React hosta i aplikacji zdalnych
- Współdzielenie stanu i routingu między zdalnymi aplikacjami
- Wersjonowanie, wdrażanie i orkiestracja