React Academy · Oppitunti

Isäntä- ja etäisten React-sovellusten määrittäminen

Määritä expose-kohteet, remote-kohteet ja jaetut riippuvuudet webpack.config.js-tiedostossa isäntäkuorelle ja kahdelle React-etäsovellukselle.

Oppitunti 2/413 vaihetta

Isäntä- ja etäisten React-sovellusten määrittäminen on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

Remoten webpack.config.js: ModuleFederationPlugin

Remote-sovellus lisää ModuleFederationPluginin webpack-määritykseensä ja määrittää kolme keskeistä ominaisuutta: name (yksilöivä tunniste, esimerkiksi "buttonApp"), filename ("remoteEntry.js" — manifestin tulostiedosto) ja exposes (julkisesta nimestä lähdetiedostopolkuun muodostuva kartta).

Komponenttien tarjoaminen remotesta

exposes-määritys yhdistää julkisen moduulipolun paikalliseen tiedostoon: { './Button': './src/Button' }. Tämä tarkoittaa, että host voi tuoda moduulin 'buttonApp/Button' ja saada komponentin tiedostosta ./src/Button.tsx. Voitte tarjota useita komponentteja, apuohjelmia tai jopa kokonaisia sivuja.

Remoten jaettu määritys

shared-ominaisuus kertoo Module Federationille, mitkä moduulit jaetaan hostin ja remoten kesken sen sijaan, että ne monistettaisiin. Reactille käytetään määritystä shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true estää useita instansseja latautumasta samanaikaisesti.

Hostin webpack.config.js: remoteihin viittaaminen

Host-sovelluksen ModuleFederationPlugin-määritys sisältää remotes-ominaisuuden: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. Avain on import-nimiavaruus, ja arvo yhdistää remoten nimen ja URL-osoitteen @-merkillä — näin Webpack tietää, mistä remote noudetaan ajonaikana.

Remoten käyttäminen Reactissa

Hostin React-koodissa remote-komponentti tuodaan dynaamisella importilla: const Button = React.lazy(() => import('buttonApp/Button')). Import-polku vastaa remoten nimiavaruutta ja exposattua moduulinimeä. React.lazy mahdollistaa importin koodin pilkkomisen ja lataa sen asynkronisesti.

Suspenseen kääriminen

Koska remote-moduulit ladataan asynkronisesti, käärikää lazy-importattu remote-komponentti aina Suspense-rajauksen sisään: Suspense fallback=Loading... /. Fallback näytetään, kun Module Federation noutaa remoteEntry.js-tiedoston ja komponentin chunkin remoten URL-osoitteesta.

Miksi singletonit ovat kriittisiä

Reactin hookit (useState, useContext, useEffect) tarvitsevat yhden sisäisen React-instanssin komponentin tilan seuraamiseen. Jos sekä host että remote lataavat oman React-kopionsa, hookit aiheuttavat "invalid hook call" -virheitä. singleton:true pakottaa ne käyttämään samaa React-instanssia ja ratkaisee tämän virheluokan kokonaan.

Versioristiriitojen ratkaiseminen

Kun host käyttää react@18.2.0 ja remote käyttää react@18.3.0, Module Federationin shared scope neuvottelee käytettävästä versiosta. singleton:true- ja requiredVersion-asetuksilla se käyttää yleensä suurempaa versiota, jos se on yhteensopiva. Asetus requiredVersion: '>=18.0.0' kiinteän version sijaan mahdollistaa joustavat versioalueet.

TypeScript: moduulimääritykset

TypeScript ei tunne remote-moduuleja käännösaikana, joten importit kuten import('buttonApp/Button') aiheuttavat tyyppivirheitä ilman määrityksiä. Käyttäkää @module-federation/typescript-pakettia tai luokaa manuaalisesti .d.ts-tiedostoja, jotka ilmoittavat moduulien tyypit. Näin saatte tyyppiturvallisuuden remote-komponenttien propseille.

Määrityksen testaaminen paikallisesti

Käynnistäkää molemmat sovellukset samanaikaisesti: remote portissa 3001 ja host portissa 3000. Avatkaa host — sen Module Federation -runtime noutaa osoitteesta http://localhost:3001/remoteEntry.js Button-moduulin, lataa sen chunkin ja renderöi sen host-sovelluksessa aivan kuin kyseessä olisi paikallinen komponentti.

Tuotannon URL-määritys

Korvatkaa tuotannossa localhost:3001 käyttöönotetun remoten URL-osoitteella. Yleinen käytäntö on käyttää ympäristömuuttujaa remoten URL-osoitteelle, jotta CI/CD voi välittää oikean URL-osoitteen kuhunkin ympäristöön: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.

Jaetut singleton-moduulit

Miksi React on määritettävä singletoniksi Module Federationin shared-määrityksessä?

Oppitunnin yhteenveto

Module Federationin määrittäminen edellyttää ModuleFederationPluginia sekä remotessa (name, filename, exposes) että hostissa (remotes). Käyttäkää remote-komponentteja React.lazy + dynamic import -yhdistelmällä ja käärikää ne Suspenseen. React ja React DOM on jaettava singleton-moduuleina, jotta usean instanssin hook-virheet vältetään. TypeScript-määritykset ja ympäristömuuttujista saatavat remoten URL-osoitteet täydentävät tuotantovalmiin määrityksen.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”Isäntä- ja etäisten React-sovellusten määrittäminen” ilmainen?

Kyllä – oppitunnin ”Isäntä- ja etäisten React-sovellusten määrittäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Isäntä- ja etäisten React-sovellusten määrittäminen”?

Määritä expose-kohteet, remote-kohteet ja jaetut riippuvuudet webpack.config.js-tiedostossa isäntäkuorelle ja kahdelle React-etäsovellukselle. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Isäntä- ja etäisten React-sovellusten määrittäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Module Federation: dynaamiset ajonaikaiset tuonnit
  2. Isäntä- ja etäisten React-sovellusten määrittäminen
  3. Tilan ja reitityksen jakaminen remote-sovellusten välillä
  4. Versiointi, käyttöönotto ja orkestrointi
← Takaisin: React Academy