React Academy · leksjon

Konfigurere verts- og eksterne React-apper

Sett opp exposes, remotes og delte avhengigheter i webpack.config.js for et vertsskall og to eksterne React-apper.

Leksjon 2 av 413 trinn

Konfigurere verts- og eksterne React-apper er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Remote-ens webpack.config.js: ModuleFederationPlugin

Remote-applikasjonen legger til ModuleFederationPlugin i webpack-konfigurasjonen med tre nøkkel-egenskaper: name (unik identifikator, f.eks. "buttonApp"), filename ("remoteEntry.js" – manifestutdataet) og exposes (en tilordning fra offentlig navn til kildefilsti).

Eksponering av komponenter fra remoten

exposes-konfigurasjonen tilordner en offentlig modulbane til en lokal fil: { './Button': './src/Button' }. Det betyr at hosten kan importere 'buttonApp/Button' og motta komponenten fra ./src/Button.tsx. Det er mulig å eksponere flere komponenter, hjelpefunksjoner eller til og med hele sider.

Delt konfigurasjon på remoten

shared-egenskapen forteller Module Federation hvilke moduler som skal deles mellom host og remote i stedet for å dupliseres. For React: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true hindrer at flere instanser lastes inn samtidig.

Hostens webpack.config.js: referanser til remotes

ModuleFederationPlugin-konfigurasjonen i host-applikasjonen inkluderer en remotes-egenskap: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. Nøkkelen er importnavneområdet, mens verdien er navnet på remoten og URL-en kombinert med @ – dette forteller Webpack hvor remoten skal hentes under kjøring.

Bruk av remoten i React

I React-koden til hosten importeres remote-komponenten med dynamisk import: const Button = React.lazy(() => import('buttonApp/Button')). Importbanen samsvarer med navneområdet til remoten og navnet på den eksponerte modulen. React.lazy gjør importen kodedelt og asynkront lastet.

Innpakning med Suspense

Ettersom remote-moduler lastes inn asynkront, bør den lazy-importerte remote-komponenten alltid pakkes inn i en Suspense-grense: Suspense fallback=Loading... /. Reserveinnholdet vises mens Module Federation henter remoteEntry.js og komponentchunken fra URL-en til remoten.

Hvorfor singletoner er avgjørende

React-hooks (useState, useContext, useEffect) er avhengige av én intern React-instans for å spore komponenttilstand. Hvis både hosten og remoten laster inn sin egen kopi av React, vil hooks utløse feil av typen "invalid hook call". singleton:true tvinger dem til å dele én React-instans, og løser dermed denne typen feil fullstendig.

Løsning av versjonskonflikter

Når hosten bruker react@18.2.0 og remoten bruker react@18.3.0, forhandler Module Federations shared scope om hvilken versjon som skal brukes. Med singleton:true og requiredVersion bruker den vanligvis den høyeste versjonen hvis den er kompatibel. Ved å angi requiredVersion: '>=18.0.0' i stedet for en fastlåst versjon blir versjonsintervallene mer fleksible.

TypeScript: moduldeklarasjoner

TypeScript kjenner ikke til remote-moduler under kompilering, så importer som import('buttonApp/Button') utløser typefeil uten deklarasjoner. Bruk @module-federation/typescript, eller opprett .d.ts-filer manuelt for å deklarere modultypene og få typesikkerhet for props til remote-komponenter.

Lokal testing av oppsettet

Kjør begge appene samtidig: remoten på port 3001 og hosten på port 3000. Åpne hosten – Module Federation-kjøremiljøet henter http://localhost:3001/remoteEntry.js, finner Button-modulen, laster ned chunken og rendrer den i host-applikasjonen som om den var en lokal komponent.

URL-konfigurasjon for produksjon

I produksjon erstattes localhost:3001 med URL-en til den utrullede remoten. Et vanlig mønster er å bruke en miljøvariabel for URL-en til remoten, slik at CI/CD kan sette inn riktig URL for hvert miljø: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.

Delte singleton-moduler

Hvorfor må React konfigureres som en singleton i Module Federations delte konfigurasjon?

Oppsummering av leksjonen

Konfigurering av Module Federation krever ModuleFederationPlugin både på remoten (med name, filename og exposes) og på hosten (med remotes). Remote-komponenter brukes via React.lazy og dynamisk import, pakket inn i Suspense. React og React DOM må være delte singletoner for å hindre hook-feil forårsaket av flere instanser. TypeScript-deklarasjoner og remote-URL-er fra miljøvariabler fullfører et produksjonsklart oppsett.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Konfigurere verts- og eksterne React-apper» gratis?

Ja – hele teksten i «Konfigurere verts- og eksterne React-apper» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Konfigurere verts- og eksterne React-apper»?

Sett opp exposes, remotes og delte avhengigheter i webpack.config.js for et vertsskall og to eksterne React-apper. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Konfigurere verts- og eksterne React-apper»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Module Federation: Dynamiske importer ved kjøring
  2. Konfigurere verts- og eksterne React-apper
  3. Dele tilstand og ruting mellom remoter
  4. Versjonering, utrulling og orkestrering
← Tilbake til React Academy