Ismerje meg, hogyan kell beállítani a Gatsby téma projekt Lerna: ez az útmutató segít megérteni, mi az a mono-repo, és hogyan kell kezelni azt Lerna segítségével NPM helyett fonal munkaterületek.
Index
- mi a Lerna és miért érdemes kipróbálni?
- Beállítás Lerna NPM a shell
- állvány mappák és fájlok shell
- használata Lerna
- válassza ki a megközelítés
- vezényeljen mindent a Lerna bootstrap
- parancsok és parancsfájlok futtatása
- frissítés varázsló
mi a Lerna és miért érdemes kipróbálni?
elkezdtem követni Jason Lengstorf (@jlengstorf) Gatsby Témaszerző tanfolyamát, és hamar rájöttem, hogy semmit sem tudok a ‘fonal munkaterületekről’. Ez egy szép módja annak, hogy kezelje az úgynevezett mono-repo-t: olyan adattár, amely egynél több projektet tartalmaz, és megoszthatja a függőségeket.
által doppelmutzi tól től doppelmutzi.github.io:
az ilyen projekteket munkaterületeknek vagy csomagoknak nevezik. Ezzel szemben több adattár használatát minden olyan adattárral, amely csak egy projektet tartalmaz, Multi-Repo megközelítésnek nevezzük.
egy dolog, ami lenyűgözött a mono-repo megközelítéssel, az volt, hogy a Csomagjaim/Munkaterületeim lokálisan ugyanazokat a node_modules
függőségeket oszthatják meg. Ez időt és fizikai teret takarít meg.
a lerna és a yarn munkaterületek lehetővé teszik számunkra, hogy könyvtárakat és alkalmazásokat építsünk egyetlen repóban anélkül, hogy arra kényszerítenénk, hogy közzétegyük az npm-ben vagy más nyilvántartásokban. Ezeknek a technológiáknak a szépsége az, hogy a csomagfüggőségeket a csomag elemzésével találják meg.az egyes projektek gyökérmappájában található json fájlok. Ezáltal ezek az eszközök elavulttá teszik a szimbolikus linkek kézi létrehozását vagy az “alacsony szintű” NPM link közvetlen használatát.
most, akkor is, ha már használja yarn workspaces
azt hiszem, Lerna megéri a próbát, mert ez biztosítja egy sor vantages. Emellett használhatja Lerna fonal munkaterületek:
egy lerna paranccsal iterálhatja az összes vagy bizonyos csomagot, futtatva egy sor műveletet (például linting, tesztelés és építés) minden csomagon. Ezáltal kiegészíti a fonal munkaterületeit, amelyek átveszik a függőségkezelési folyamatot.
végül úgy döntöttem, hogy megtanulom a Lerna – t – sajnálom a nyelvcsavarót -, de nem akartam fonalra váltani (mivel csak jól érzem magam az npm-Mel). Itt van, hogyan sikerült, hogy ez a munka:
Lerna beállítása NPM-mel a héjból
hozzon létre egy könyvtárat a projekthez, majd írja be ezt a parancsot:
mkdir try-lernacd try-lerna
telepítheti a Lerna-t globálisan (npm i -g lerna
), vagy használhatja az npx-vel.
-
Init lerna
npx lerna init --independent
ez lesz:
-
init
a git repository - hozzon létre egy
package.json
- hozzon létre egy
lerna.json
- hozzon létre egy
packages
mappát (itt helyezheti el a munkaterületeket).
csomagok hogyan lerna hívja munkaterületek.
a csomagokat a kívánt módon rendezheti, ha úgy tetszik, az összes csomagot a gyökérmappába helyezheti, majd megváltoztathatja a tömböt, hogy megfeleljen (mint a “fonal munkaterületek” megközelítés).
saját lerna.json fájl stream: true
(annak érdekében, hogy gatsby kimenet futtatásakor fejleszteni lerna) és hoist: true
(annak érdekében, hogy felemelje node_modules is a parancsot lerna add
; elmagyarázom ezt az utolsó funkció előre):
{ "packages":, "version":"independent", "stream":true, "command":{ "bootstrap":{ "hoist":true } }}
ezt manuálisan is hozzáadhatja, vagy használhatja ezt az egyszerű shell parancsot:
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
állvány mappák és fájlok shell
ez a rész kézzel végezhető Jason Lengstorf tanfolyamának első leckéjét követően, amely a bevezetőben található.
csak összegyűjtöm az összes alapvető részt, hogy a shell néhány parancsával teljesítsem őket.
abban az esetben, ha használni szeretné a megközelítésemet, ne felejtse el kicserélni a” név ” szót a téma nevére, majd csak másolja be ezt a parancsot:
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
a csomag kezdeti tartalma.json a webhely mappájában:
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
csomag.json a mappa témájában (cserélje ki újra a nevet, majd helyezze be a YOUR_NPM_USER fájlt):
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
itt az eredmény:
├── packages│ ├── site│ └── gatsby-theme-NAME├── .gitignore├── package.json└── lerna.json
PS: azt tanácsolom, hogy hozzon létre egy .gitignore
és add hozzá node_modules
azonnal:
echo "node_modules" > .gitignore
a Lerna
használatával a Lerna egyik problémája az, hogy egyetlen paranccsal nem lehet csomagonként több függőséget telepíteni (mint a yarn workspace name_workspace add package1 package2 etc
esetén). Meg kell csinálni egy-egy, mint ez (ha nem telepíti globálisan akkor meg kell előzni minden parancsot npx
):
lerna add gatsby --scope site
lerna add react --scope site
lerna add react-dom --scope site
itt --scope site
arra szolgál, hogy megmondja Lerna-nak, hogy csak a “site”csomagban telepítse.
azonban telepíthet egy függőséget, mondjuk gatsby
, minden csomaghoz csak egy paranccsal:
lerna add gatsby
ez a parancs:
- telepítse Gatsby minden csomag (tehát ebben az esetben a helyszínen, valamint a téma csomag).
- ha engedélyezte
hoist
a lerna.json létrehoz egy node_modules mappát a gyökérben (lásd ‘Lerna Bootstrap forward’):
válassza ki a megközelítést
Ha tetszik ez a megközelítés, folytathatja az összes gyakori függőség telepítését (react
, react-dom
) a csomagokon. Ha csak egy csomaghoz kell telepítenie néhány függőséget, használja a --scope name_of_the_package
parancsot (ne feledje, hogy ez a csomagon megadott név.json nem a mappa neve).
az npm-et úgy is használhatja, hogy minden kívánt függőséget telepít a megfelelő csomagba. De ne feledje, ez a megközelítés telepíti a node_modules függőségek minden egyes mappát. Ez tiszta lehet, majd utána felemelhető. Bár ez az opció érvényes, több időt vesz igénybe.
bármelyik opciót is választja, ne felejtse el hozzáadni/összekapcsolni a helyi témacsomagot a Webhelycsomag függőségeként (használja a beállított nevetpackage.json
):
lerna add @YOUR_NPM_USER/gatsby-theme-NAME --scope=site
Orchestrate mindent Lerna bootstrap
a végén biztonságosan megteheti:
lerna bootstrap
ez a parancs nagyon hasznos, különösen, ha már megvan a csomagja.a json tele van a megfelelő függőségekkel.
hoist: true
opcióval (a lerna.json
– on) egy megosztott node_modules
mappát helyez el a gyökérben, majd összekapcsolja a helyi függőségeket a megfelelő package.json
– ben.
nagyon szeretem –hoist feature ez egy olyan folyamat, amely elkerüli a node_modules duplikált függőségeit, így fizikai helyet és telepítési időt takarít meg.
ha bármilyen okból meg akarja tisztítani valamit, először megteheti:
lerna clean && lerna link && lerna bootstrap
parancsok és parancsfájlok futtatása
parancsfájlok futtatásához (a package.json
– re helyezve) meg kell adnia (vagy nem) a célcsomagot:
lerna run develop --scope Package_name
Lerna is engedi futtatni parancsokat a root minden csomagot (használja dash). Például:
lerna exec -- rm -rf node_modules
ez eltávolítja a csomópont modulokat minden csomag mappából.
frissítés varázsló
a jövőben, amikor frissítenie kell a csomagokat, használhatja a frissítés varázslót:
npm install --save-dev lerna-update-wizard
ezután csak ezt a parancsot kell futtatnia, és a varázsló segít:
lernaupdate