Opi luomaan Gatsby-Teemaprojekti Lernan kanssa: tämä opas auttaa sinua ymmärtämään, mikä on mono-repo ja miten hallita sitä Lernalla käyttämällä npm: ää Lankatyötilojen sijaan.

Hakemisto

  • mikä on Lerna ja miksi sitä kannattaa kokeilla?
  • Lernan asettaminen NPM: llä komentotulkista
  • Tukikansiot ja tiedostot, joissa komentotulkki
  • käyttäen Lernaa
    • valitse lähestymistapasi
  • Orchestrate everything with Lerna bootstrap
  • Run commands and scripts
  • Update Wizard

mikä on Lerna ja miksi sitä kannattaa kokeilla?

aloin seurata Jason Lengstorfin (@jlengstorf) Gatsby Theme Authoring-kurssia ja tajusin pian, etten tiedä mitään ”Lankatyötiloista”. Se on kaunis tapa hallita niin sanottua mono-Repoa.: arkisto, jossa on useampi kuin yksi projekti ja joka voi jakaa riippuvuuksia.

By doppelmutzi from doppelmutzi.github.io:

tällaisia projekteja kutsutaan työtiloiksi tai paketeiksi. Sitä vastoin usean arkiston käyttöä, jossa kussakin arkistossa on vain yksi projekti, kutsutaan Monirepo-lähestymistavaksi.

yksi asia, joka hämmästytti minua mono-repo-lähestymistavalla, oli se, että pakettini/Työtilani voivat paikallisesti jakaa samat node_modules riippuvuudet. Tämä säästää aikaa ja fyysistä tilaa.

Lerna – ja lankatyötilat antavat meille mahdollisuuden rakentaa kirjastoja ja sovelluksia yhteen repoon pakottamatta meitä julkaisemaan npm: ään tai muihin rekistereihin. Kauneus näiden teknologioiden on, että ne voivat löytää paketti riippuvuudet analysoimalla paketti.JSON-tiedostot sijaitsevat kunkin projektin pääkansiossa. Siten nämä työkalut tekevät tarpeettomaksi luoda manuaalisesti symlinkkejä tai käyttää ”matalan tason” npm-linkkiä suoraan.

nyt, vaikka käytät jo yarn workspaces mielestäni Lernaa kannattaa kokeilla, koska se tarjoaa sarjan näköalapaikkoja. Lisäksi voit käyttää Lernaa Lankatyötilojen kanssa:

yhdellä Lerna-komennolla voit iteroida kaikkien tai tiettyjen pakettien läpi ajamalla joukon toimintoja (kuten lintaus, testaus ja rakentaminen) kussakin paketissa. Näin se kehuu lankatyötiloja, jotka ottavat hoitaakseen riippuvuudenhallintaprosessin.

niin lopulta päätin opetella Lernan-anteeksi kielen pyörremyrsky-mutta en halunnut vaihtaa lankaan (koska npm on minulle vain mukava). Näin onnistuin saamaan sen toimimaan:

Lernan asettaminen npm: llä tulkista

luo projektillesi hakemisto ja syötä siihen tällä komennolla:

mkdir try-lernacd try-lerna

voit asentaa Lernan globaalisti (npm i -g lerna) tai käyttää sitä npx: n kanssa.

  • Init lerna

    npx lerna init --independent

tämä:

  • init git-arkisto
  • luo package.json
  • luo lerna.json
  • luo packages – kansio (tähän voit sijoittaa työtilasi).

paketteja Lerna kutsuu työtiloiksi.

voit järjestää paketit kuten haluat, Jos haluat voit laittaa kaikki paketit pääkansioon ja sitten muuttaa array vastaamaan (kuten ”Lanka työtilat” lähestymistapa).

My lerna.JSON-tiedostolla on stream: true (jotta näet gatsby-lähdön ajettaessa, kehitä lernalla) ja hoist: true (voidaksesi nostaa node_moduleita myös komennolla lerna add; selitän tämän viimeisen ominaisuuden eteenpäin):

{ "packages":, "version":"independent", "stream":true, "command":{ "bootstrap":{ "hoist":true } }}

voit lisätä tämän manuaalisesti tai käyttää tätä yksinkertaista komentotulkkia:

echo "{\r\t\"packages\":,\r\t\"version\":\"independent\",\r\t\"stream\":true,\r\t\"command\":{\r\t\t\"bootstrap\":{\r\t\t\t\"hoist\":true\r\t\t}\r\t}\r}" > lerna.json 

Scaffolding kansiot ja tiedostot shell

tämä osio voidaan tehdä käsin Jason Lengstorfin kurssin ensimmäisen oppitunnin jälkeen.
kerään vain kaikki peruskohdat saavuttaakseni ne muutamilla komentotulkin komennoilla.
jos haluat käyttää minun lähestymistapaani, muista korvata” nimi ” teeman nimellä ja kopioi ja liitä tämä komento:

mkdir -p packages/{gatsby-theme-NAME,site}
touch packages/{gatsby-theme-NAME,site}/{index.js,package.json}
echo "//loop" >> packages/{gatsby-theme-NAME,site}/index.js

alkuperäinen sisältö paketille.json sivuston kansiossa:

echo "{\r\t\"private\":true,\r\t\"name\":\"site\",\r\t\"version\":\"1.0.0\",\r\t\"license\":\"MIT\",\r\t\"scripts\":{\r\t\t\"builds\":\"gatsby build\",\r\t\t\"develop\":\"gatsby develop\",\r\t\t\"clean\":\"gaysby clean\"\r\t}\r}" >> packages/site/package.json 

paketti.JSON kansioteema (korvaa nimi uudelleen ja myös lisätä YOUR_NPM_USER):

echo "{\r\t\"name\": \"@YOUR_NPM_USER/gatsby-theme-NAME\",\r\t\"version\": \"1.0.1\",\r\t\"license\": \"MIT\",\r\t\"main\": \"index.js\",\r\t\"scripts\": {\r\t\t\"builds\": \"gatsby build\",\r\t\t\"develop\": \"gatsby develop\",\r\t\t\"clean\": \"gaysby clean\"\r\t}\r}" >> packages/gatsby-theme-NAME/package.json 

tässä tulos:

├── packages│ ├── site│ └── gatsby-theme-NAME├── .gitignore├── package.json└── lerna.json

PS: neuvon luomaan .gitignore ja lisäämään node_modules heti:

echo "node_modules" > .gitignore

Lernan käyttäminen

yksi Lernan ongelma on se, että pakettia kohti ei voi asentaa useita riippuvuuksia yhdellä komennolla (kuten yarn workspace name_workspace add package1 package2 etc). Sinun täytyy tehdä se yksi kerrallaan, näin (Jos et ole asentanut sitä globaalisti sinun täytyy edeltää jokaista käskyä npx):

lerna add gatsby --scope site 

lerna add react --scope site
lerna add react-dom --scope site

tässä --scope site käytetään käskemään Lernaa asentamaan vain pakettiin ”sivusto”.

voit kuitenkin asentaa riippuvuuden, sanotaanko gatsby, jokaiselle paketille, jossa on vain yksi komento:

lerna add gatsby

tämä komento:

  • Asenna Gatsby jokaisen paketin (joten tässä tapauksessa sivuston ja myös teema paketti).
  • jos sallit hoist lernalla.JSON se luo node_modules-kansion juureesi (katso ’Lerna Bootstrap forward’):

valitse lähestymistapasi

Jos pidät tästä lähestymistavasta, voit jatkaa kaikkien yhteisten riippuvuuksien (react, react-dom) asentamista paketteihin. Jos tarvitset joitain riippuvuuksia vain yhdelle paketille, käytä --scope name_of_the_package (muista, että se on paketissa määritelty nimi.JSON ei kansion nimi).

voit myös käyttää npm: ää asentamalla kaikki haluamasi riippuvuudet kyseiseen pakettiin. Mutta muista tämä lähestymistapa asentaa node_modules riippuvuudet jokaisen vastaavan kansion. Tämä voisi olla puhdas ja sitten nostettu jälkeenpäin. Vaikka tämä vaihtoehto on voimassa, se vie enemmän aikaa.

minkä tahansa vaihtoehdon valitset muista lisätä / linkittää paikallinen teemapaketti riippuvuutena Sivustopaketista (käytä valitsemaasi nimeäpackage.json):

lerna add @YOUR_NPM_USER/gatsby-theme-NAME --scope=site

Orchestrate everything with Lerna bootstrap

in the end you can safely do:

lerna bootstrap 

tämä komento on todella hyödyllinen, varsinkin jos sinulla on jo paketti.json on täynnä riippuvuuksiaan.

kanssa hoist: true vaihtoehto (lerna.json) se asettaa jaetun node_modules – kansion, joka sijaitsee juuressa, sitten se yhdistää paikalliset riippuvuudet niiden vastaavissa package.json.

pidän todella –hoist-ominaisuudesta se on prosessi, joka välttää päällekkäisiä riippuvuuksia node_moduleista, joten se säästää fyysistä tilaa ja asennusaikaa.

jos jostain syystä haluat puhdistaa jotain ensin voisit tehdä:

lerna clean && lerna link && lerna bootstrap 

Suorita komentoja ja komentosarjoja

suorittaaksesi komentosarjoja (sijoitettu package.json: lle) sinun täytyy määrittää (tai ei) kohdepaketti:

lerna run develop --scope Package_name

Lerna myös antaa sinun ajaa kaikki komennot juuresta jokaiseen pakettiin (käytä Dashia). Esimerkiksi:

lerna exec -- rm -rf node_modules 

Tämä poistaa solmumoduulit jokaisesta Pakettikansiosta.

Update Wizard

tulevaisuudessa, kun joudut päivittämään pakettejasi, voit käyttää update-wizardia:

npm install --save-dev lerna-update-wizard

sitten sinun täytyy suorittaa vain tämä komento ja ohjattu toiminto auttaa sinua:

lernaupdate