Ismerje meg, hogyan használhatja az Nx munkaterĂĽleteket a frontend monorepo fejlesztĂ©shez, javĂtva a kĂłdmegosztást, a build teljesĂtmĂ©nyt Ă©s a fejlesztĹ‘k egyĂĽttműködĂ©sĂ©t.
Frontend Nx Workspace: Monorepo fejlesztés a méretezhető alkalmazásokhoz
A mai rohanĂł szoftverfejlesztĂ©si környezetben nagymĂ©retű frontend alkalmazások Ă©pĂtĂ©se Ă©s karbantartása kihĂvást jelenthet. A fĂĽggĹ‘sĂ©gek kezelĂ©se, a kĂłdkonzisztencia biztosĂtása Ă©s a buildelĂ©si idĹ‘k optimalizálása egyre összetettebbĂ© válik a projektek növekedĂ©sĂ©vel. A Monorepos hatĂ©kony megoldást kĂnál azáltal, hogy több projektet Ă©s könyvtárat egyetlen tárolĂłban konszolidál. Az Nx, egy intelligens, bĹ‘vĂthetĹ‘ build rendszer, fejlett eszközökkel Ă©s funkciĂłkkal javĂtja a monorepo fejlesztĂ©st.
Ez az átfogó útmutató az Nx workspace használatának előnyeit vizsgálja a frontend monorepo fejlesztéshez, kulcsfontosságú fogalmakat, gyakorlati példákat és bevált gyakorlatokat fed le.
Mi az a Monorepo?
A monorepo egy szoftverfejlesztĂ©si stratĂ©gia, ahol az összes projekt Ă©s azok fĂĽggĹ‘sĂ©gei egyetlen tárolĂłban tárolĂłdnak. Ez a megközelĂtĂ©s ellentĂ©tes a hagyományos multi-repo megközelĂtĂ©ssel, ahol minden projektnek saját tárolĂłja van.
A Monorepo főbb jellemzői:
- Az igazság egyetlen forrása: Minden kód egy helyen található.
- Kódmegosztás és -újrafelhasználás: Könnyebb a kód megosztása és újrafelhasználása a projektek között.
- EgyszerűsĂtett fĂĽggĹ‘sĂ©gkezelĂ©s: A fĂĽggĹ‘sĂ©gek kezelĂ©se a projektek között egyszerűbbĂ© válik.
- Atomikus változások: A változások több projektet is átfoghatnak, biztosĂtva a konzisztenciát.
- JavĂtott egyĂĽttműködĂ©s: Könnyebb a csapatok számára az összefĂĽggĹ‘ projekteken valĂł egyĂĽttműködĂ©s.
Miért érdemes Monorepót használni a Frontend Fejlesztéshez?
A Monorepos jelentĹ‘s elĹ‘nyöket kĂnál a frontend fejlesztĂ©shez, kĂĽlönösen a nagymĂ©retű Ă©s összetett projektek esetĂ©ben.
- Továbbfejlesztett kĂłdmegosztás: A frontend projektek gyakran osztanak meg közös UI komponenseket, segĂ©dfunkciĂłkat Ă©s tervezĂ©si rendszereket. A monorepo megkönnyĂti a kĂłdmegosztást, csökkenti a duplikáciĂłt Ă©s elĹ‘segĂti a konzisztenciát. PĂ©ldául egy tervezĂ©si rendszer könyvtár könnyen megoszthatĂł több React alkalmazás között ugyanazon a munkaterĂĽleten.
- EgyszerűsĂtett fĂĽggĹ‘sĂ©gkezelĂ©s: A fĂĽggĹ‘sĂ©gek kezelĂ©se több frontend projekt között kihĂvást jelenthet, kĂĽlönösen a folyamatosan fejlĹ‘dĹ‘ JavaScript ökoszisztĂ©mában. A monorepo egyszerűsĂti a fĂĽggĹ‘sĂ©gkezelĂ©st a fĂĽggĹ‘sĂ©gek központosĂtásával, valamint a verziĂłk Ă©s frissĂtĂ©sek kezelĂ©sĂ©hez szĂĽksĂ©ges eszközökkel.
- JavĂtott build teljesĂtmĂ©ny: Az Nx fejlett build gyorsĂtĂłtárazást Ă©s fĂĽggĹ‘sĂ©g-elemzĂ©st biztosĂt, lehetĹ‘vĂ© tĂ©ve a gyorsabb Ă©s hatĂ©konyabb buildelĂ©st. A fĂĽggĹ‘sĂ©gi gráf elemzĂ©sĂ©vel az Nx csak a változás által Ă©rintett projekteket tudja ĂşjraĂ©pĂteni, jelentĹ‘sen csökkentve a buildelĂ©si idĹ‘t. Ez kulcsfontosságĂş a nagymĂ©retű frontend alkalmazások esetĂ©ben, amelyek számos komponenst Ă©s modult tartalmaznak.
- EgyszerűsĂtett refaktorálás: A kĂłd refaktorálása több projektben egyszerűbb a monorepĂłban. A változtatások atomikusan elvĂ©gezhetĹ‘k, biztosĂtva a konzisztenciát Ă©s csökkentve a hibák bevezetĂ©sĂ©nek kockázatát. PĂ©ldául egy több alkalmazásban használt komponens átnevezĂ©se egyetlen committal elvĂ©gezhetĹ‘.
- Jobb egyĂĽttműködĂ©s: A monorepo jobb egyĂĽttműködĂ©st tesz lehetĹ‘vĂ© a frontend fejlesztĹ‘k között azáltal, hogy közös kĂłdbázist Ă©s közös fejlesztĹ‘i környezetet biztosĂt. A csapatok könnyen hozzájárulhatnak kĂĽlönbözĹ‘ projektekhez, valamint megoszthatják a tudást Ă©s a bevált gyakorlatokat.
Az Nx bemutatása: Az intelligens, bĹ‘vĂthetĹ‘ build rendszer
Az Nx egy hatĂ©kony build rendszer, amely fejlett eszközökkel Ă©s funkciĂłkkal javĂtja a monorepo fejlesztĂ©st. SzabványosĂtott fejlesztĂ©si Ă©lmĂ©nyt nyĂşjt, javĂtja a build teljesĂtmĂ©nyt Ă©s egyszerűsĂti a fĂĽggĹ‘sĂ©gkezelĂ©st.
Az Nx főbb jellemzői:
- Intelligens build rendszer: Az Nx elemzi a projektek fĂĽggĹ‘sĂ©gi gráfját, Ă©s csak az Ă©rintett projekteket Ă©pĂti Ăşjra, jelentĹ‘sen csökkentve a buildelĂ©si idĹ‘t.
- KĂłdgenerálás: Az Nx kĂłdgenerálĂł eszközöket biztosĂt Ăşj projektek, komponensek Ă©s modulok lĂ©trehozásához, felgyorsĂtva a fejlesztĂ©st Ă©s biztosĂtva a konzisztenciát.
- Integrált eszközök: Az Nx integrálható a népszerű frontend keretrendszerekkel, mint például a React, az Angular és a Vue.js, zökkenőmentes fejlesztési élményt nyújtva.
- Plugin ökoszisztĂ©ma: Az Nx gazdag plugin ökoszisztĂ©mával rendelkezik, amely további eszközökkel Ă©s integráciĂłkkal bĹ‘vĂti a funkcionalitását.
- Inkrementális buildek: Az Nx inkrementális build rendszere csak a megváltozott dolgokat Ă©pĂti Ăşjra, drasztikusan felgyorsĂtva a fejlesztĂ©si visszacsatolási hurkot.
- SzámĂtás gyorsĂtĂłtárazás: Az Nx gyorsĂtĂłtárazza a drága számĂtások, pĂ©ldául a buildek Ă©s a tesztek eredmĂ©nyeit, tovább javĂtva a teljesĂtmĂ©nyt.
- Elosztott feladat vĂ©grehajtás: Nagyon nagy monorepok esetĂ©n az Nx a feladatokat több gĂ©pen oszthatja el, hogy párhuzamosĂtsa a buildeket Ă©s a teszteket.
Nx munkaterĂĽlet beállĂtása a frontend fejlesztĂ©shez
Az Nx munkaterĂĽlet beállĂtása egyszerű. Az Nx CLI segĂtsĂ©gĂ©vel Ăşj munkaterĂĽletet hozhat lĂ©tre, Ă©s projekteket Ă©s könyvtárakat adhat hozzá.
Előfeltételek:
- Node.js (16-os vagy Ăşjabb verziĂł)
- npm vagy yarn
Lépések:
- TelepĂtse az Nx CLI-t:
npm install -g create-nx-workspace
- Hozzon létre egy új Nx munkaterületet:
npx create-nx-workspace my-frontend-workspace
A rendszer felszĂłlĂtja, hogy válasszon egy beállĂtást. Válasszon egy olyan beállĂtást, amely megfelel az Ă–n preferált frontend keretrendszerĂ©nek (pl. React, Angular, Vue.js).
- Adjon hozzá egy új alkalmazást:
nx generate @nx/react:application my-app
Ez a parancs létrehoz egy új React alkalmazást "my-app" néven a munkaterületen belül.
- Adjon hozzá egy új könyvtárat:
nx generate @nx/react:library my-library
Ez a parancs létrehoz egy új React könyvtárat "my-library" néven a munkaterületen belül. A könyvtárak a kód megosztására szolgálnak az alkalmazások között.
Nx munkaterületének szervezése
A jĂłl szervezett Nx munkaterĂĽlet elengedhetetlen a karbantarthatĂłsághoz Ă©s a mĂ©retezhetĹ‘sĂ©ghez. Vegye figyelembe a következĹ‘ iránymutatásokat a munkaterĂĽlet felĂ©pĂtĂ©sekor:
- Alkalmazások: Az alkalmazások a frontend projektek belépési pontjai. Ezek a felhasználó felé irányuló felületeket képviselik. Ilyenek például a webalkalmazás, a mobilalkalmazás vagy az asztali alkalmazás.
- Könyvtárak: A könyvtárak ĂşjrafelhasználhatĂł kĂłdot tartalmaznak, amely megoszthatĂł több alkalmazás között. KĂĽlönbözĹ‘ tĂpusokba vannak szervezve a funkcionalitásuk alapján.
- Funkciókönyvtárak: A funkciókönyvtárak egy adott funkció üzleti logikáját és UI komponenseit tartalmazzák. A mag és UI könyvtáraktól függenek.
- UI könyvtárak: Az UI könyvtárak újrafelhasználható UI komponenseket tartalmaznak, amelyek több funkcióban és alkalmazásban is használhatók.
- Core könyvtárak: A core könyvtárak segédfunkciókat, adatmodelleket és egyéb közös kódot tartalmaznak, amelyet a munkaterületen használnak.
- Megosztott könyvtárak: A megosztott könyvtárak keretrendszer-fĂĽggetlen kĂłdot tartalmaznak, amelyet több alkalmazás Ă©s könyvtár használhat, fĂĽggetlenĂĽl a frontend keretrendszertĹ‘l (React, Angular, Vue.js). Ez elĹ‘segĂti a kĂłd Ăşjrafelhasználását Ă©s csökkenti a duplikáciĂłt.
Példa a könyvtárszerkezetre:
my-frontend-workspace/ ├── apps/ │ ├── my-app/ │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.tsx │ │ │ │ └── app.module.css │ │ │ └── main.tsx │ │ └── project.json │ └── my-other-app/ │ └── ... ├── libs/ │ ├── feature-my-feature/ │ │ ├── src/ │ │ │ └── lib/ │ │ │ └── feature-my-feature.tsx │ │ └── project.json │ ├── ui/ │ │ ├── src/ │ │ │ └── lib/ │ │ │ └── button/ │ │ │ └── button.tsx │ │ └── project.json │ ├── core/ │ │ ├── src/ │ │ │ └── lib/ │ │ │ └── api.ts │ │ └── project.json │ └── shared/ │ ├── src/ │ │ └── lib/ │ │ └── date-formatter.ts │ └── project.json ├── tools/ │ └── generators/ ├── nx.json ├── package.json └── tsconfig.base.json
Kódmegosztás és -újrafelhasználás Nx könyvtárakkal
Az Nx könyvtárak a kódmegosztás és az újrafelhasználás kulcsa a monorepóban. A kód rendezett könyvtárakba történő rendezésével könnyedén megoszthat komponenseket, szolgáltatásokat és segédprogramokat több alkalmazás között.
Példa: UI komponens megosztása
Tegyük fel, hogy van egy gomb komponense, amelyet több React alkalmazás között szeretne megosztani. Létrehozhat egy "ui" nevű UI könyvtárat, és ebbe a könyvtárba helyezheti a gomb komponenst.
- Hozzon létre egy UI könyvtárat:
nx generate @nx/react:library ui
- Hozzon létre egy gomb komponenst:
nx generate @nx/react:component button --project=ui
- Implementálja a gomb komponenst:
// libs/ui/src/lib/button/button.tsx import styles from './button.module.css'; interface ButtonProps { text: string; onClick: () => void; } export function Button({ text, onClick }: ButtonProps) { return ( ); } export default Button;
- Exportálja a gomb komponenst a könyvtárból:
// libs/ui/src/index.ts export * from './lib/button/button';
- Használja a gomb komponenst egy alkalmazásban:
// apps/my-app/src/app/app.tsx import { Button } from '@my-frontend-workspace/ui'; function App() { return (
Welcome to My App
A könyvtárak használatával biztosĂthatja, hogy a UI komponensei konzisztensek legyenek az összes alkalmazásban. Amikor frissĂti a gomb komponenst az UI könyvtárban, az összes olyan alkalmazás, amely a komponenst használja, automatikusan frissĂĽl.
Függőségkezelés az Nx munkaterületeken
Az Nx hatĂ©kony eszközöket biztosĂt a projektek Ă©s könyvtárak közötti fĂĽggĹ‘sĂ©gek kezelĂ©sĂ©hez. A fĂĽggĹ‘sĂ©geket explicit mĂłdon definiálhatja az egyes projektek vagy könyvtárak `project.json` fájljában.
Példa: Függőség deklarálása
Tegyük fel, hogy az Ön "my-app" alkalmazása a "core" könyvtártól függ. Ezt a függőséget deklarálhatja a "my-app" `project.json` fájljában.
// apps/my-app/project.json
{
"name": "my-app",
"projectType": "application",
...
"implicitDependencies": ["core"]
}
A fĂĽggĹ‘sĂ©gek explicit deklarálásával az Nx elemzi a munkaterĂĽlet fĂĽggĹ‘sĂ©gi gráfját, Ă©s csak az Ă©rintett projekteket Ă©pĂti Ăşjra, amikor egy fĂĽggĹ‘sĂ©g megváltozik. Ez jelentĹ‘sen javĂtja a build teljesĂtmĂ©nyt.
Build teljesĂtmĂ©ny optimalizálása az Nx-szel
Az Nx intelligens build rendszere Ă©s a számĂtási gyorsĂtĂłtárazási kĂ©pessĂ©gei jelentĹ‘sen javĂtják a build teljesĂtmĂ©nyt. ĂŤme nĂ©hány tipp a build teljesĂtmĂ©ny optimalizálásához az Nx munkaterĂĽletĂ©n:
- Elemezze a fĂĽggĹ‘sĂ©gi gráfot: Az `nx graph` parancs segĂtsĂ©gĂ©vel vizualizálhatja a munkaterĂĽlet fĂĽggĹ‘sĂ©gi gráfját. AzonosĂtsa a potenciális szűk keresztmetszeteket, Ă©s optimalizálja a projektstruktĂşrát a fĂĽggĹ‘sĂ©gek csökkentĂ©se Ă©rdekĂ©ben.
- Használja a számĂtás gyorsĂtĂłtárazást: Az Nx gyorsĂtĂłtárazza a drága számĂtások, pĂ©ldául a buildek Ă©s a tesztek eredmĂ©nyeit. GyĹ‘zĹ‘djön meg arrĂłl, hogy a számĂtás gyorsĂtĂłtárazása engedĂ©lyezve van az `nx.json` fájlban.
- Futtasson feladatokat párhuzamosan: Az Nx párhuzamosan tudja futtatni a feladatokat, hogy kihasználja a több CPU-magot. Használja a `--parallel` zászlót a feladatok párhuzamos futtatásához.
- Használja az elosztott feladat vĂ©grehajtást: Nagyon nagy monorepok esetĂ©n az Nx a feladatokat több gĂ©pen oszthatja el a buildek Ă©s tesztek párhuzamosĂtásához.
- Optimalizálja a kĂłdot: Optimalizálja a kĂłdot a buildelĂ©si idĹ‘k csökkentĂ©se Ă©rdekĂ©ben. TávolĂtsa el a nem használt kĂłdot, optimalizálja a kĂ©peket, Ă©s használjon kĂłd felosztást a kötegek mĂ©retĂ©nek csökkentĂ©sĂ©hez.
Tesztelés az Nx munkaterületeken
Az Nx integrált tesztelĹ‘ eszközöket biztosĂt az egysĂ©gtesztek, integráciĂłs tesztek Ă©s vĂ©gponttĂłl vĂ©gpontig tartĂł tesztek futtatásához. Az `nx test` parancs segĂtsĂ©gĂ©vel futtathat teszteket a munkaterĂĽleten lĂ©vĹ‘ összes projekthez vagy egy adott projekthez.
Példa: Tesztek futtatása
nx test my-app
Ez a parancs futtatja a "my-app" alkalmazás összes tesztjét.
Az Nx támogatja a népszerű tesztelési keretrendszereket, mint például a Jest, a Cypress és a Playwright. A tesztelési környezetet az egyes projektek `project.json` fájljában konfigurálhatja.
Folyamatos integráciĂł Ă©s folyamatos telepĂtĂ©s (CI/CD) az Nx-szel
Az Nx zökkenĹ‘mentesen integrálĂłdik a nĂ©pszerű CI/CD rendszerekkel, mint pĂ©ldául a GitHub Actions, a GitLab CI Ă©s a Jenkins. Az Nx parancssori felĂĽletĂ©vel automatizálhatja a buildeket, a teszteket Ă©s a telepĂtĂ©seket a CI/CD csatornájában.
Példa: GitHub Actions munkafolyamat
ĂŤme egy pĂ©lda a GitHub Actions munkafolyamatra, amely buildeli, teszteli Ă©s telepĂti az Nx munkaterĂĽletĂ©t:
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm ci
- run: npx nx affected --target=lint --base=origin/main --head=HEAD
- run: npx nx affected --target=test --base=origin/main --head=HEAD --watchAll=false
- run: npx nx affected --target=build --base=origin/main --head=HEAD
Ez a munkafolyamat a következő feladatokat futtatja:
- Lintelés: Futtatja a linteket az érintett projekteken.
- Tesztelés: Futtatja a teszteket az érintett projekteken.
- Buildelés: Buildeli az érintett projekteket.
Az Nx biztosĂtja az `affected` parancsot, amely lehetĹ‘vĂ© teszi, hogy csak azokat a projekteket futtassa, amelyeket a változás Ă©rintett. Ez jelentĹ‘sen csökkenti a CI/CD csatorna vĂ©grehajtási idejĂ©t.
Frontend Nx munkaterület fejlesztésének bevált gyakorlatai
Íme néhány bevált gyakorlat a frontend alkalmazások fejlesztéséhez az Nx-szel:
- Konzisztens kĂłdolási stĂlust kövessen: Használjon kĂłdformázĂłt, mint pĂ©ldául a Prettier, Ă©s lintert, mint pĂ©ldául az ESLint, hogy konzisztens kĂłdolási stĂlust kĂ©nyszerĂtsen ki a munkaterĂĽletĂ©n.
- ĂŤrjon egysĂ©gteszteket: ĂŤrjon egysĂ©gteszteket az összes komponensĂ©hez, szolgáltatásához Ă©s segĂ©dprogramjához a kĂłd minĹ‘sĂ©gĂ©nek biztosĂtása Ă©s a regressziĂłk megelĹ‘zĂ©se Ă©rdekĂ©ben.
- Használjon tervezĂ©si rendszert: Használjon tervezĂ©si rendszert a UI komponensek közötti konzisztencia biztosĂtásához.
- Dokumentálja a kódját: Dokumentálja alaposan a kódját, hogy a többi fejlesztő számára könnyebben érthető és karbantartható legyen.
- Használjon verziókezelést: Használjon Gitet a verziókezeléshez, és kövessen konzisztens elágazási stratégiát.
- Automatizálja a munkafolyamatát: Automatizálja a munkafolyamatát a CI/CD-vel, hogy biztosĂtsa a kĂłdjának mindig automatikus tesztelĂ©sĂ©t Ă©s telepĂtĂ©sĂ©t.
- Tartsa naprakĂ©szen a fĂĽggĹ‘sĂ©geket: Rendszeresen frissĂtse a fĂĽggĹ‘sĂ©geit, hogy rĂ©szesĂĽljön a legĂşjabb funkciĂłkban Ă©s biztonsági javĂtásokban.
- Figyelje a teljesĂtmĂ©nyt: Figyelje alkalmazásai teljesĂtmĂ©nyĂ©t, Ă©s azonosĂtsa a potenciális szűk keresztmetszeteket.
HaladĂł Nx fogalmak
Ha már kĂ©nyelmesen Ă©rzi magát az Nx alapjaival, akkor felfedezhet nĂ©hány haladĂł fogalmat a fejlesztĂ©si munkafolyamatának további javĂtása Ă©rdekĂ©ben:
- EgyĂ©ni generátorok: Hozzon lĂ©tre egyĂ©ni generátorokat Ăşj projektek, komponensek Ă©s modulok lĂ©trehozásának automatizálásához. Ez jelentĹ‘sen csökkentheti a fejlesztĂ©si idĹ‘t, Ă©s biztosĂthatja a konzisztenciát.
- Nx Pluginok: Fejlesszen Nx pluginokat az Nx funkcionalitásának kibĹ‘vĂtĂ©sĂ©hez egyĂ©ni eszközökkel Ă©s integráciĂłkkal.
- Modul SzövetsĂ©g: A modul szövetsĂ©ggel kĂĽlön-kĂĽlön Ă©pĂtheti Ă©s telepĂtheti alkalmazásának fĂĽggetlen rĂ©szeit. Ez gyorsabb telepĂtĂ©seket Ă©s nagyobb rugalmasságot tesz lehetĹ‘vĂ©.
- Nx Cloud: Integráljon az Nx Cloud-dal, hogy fejlett build betekintĂ©st, elosztott feladat vĂ©grehajtást Ă©s távoli gyorsĂtĂłtárazást kapjon.
Következtetés
Az Nx munkaterĂĽletek hatĂ©kony Ă©s eredmĂ©nyes mĂłdot kĂnálnak a frontend monorepĂłk kezelĂ©sĂ©hez. Az Nx fejlett eszközeinek Ă©s funkciĂłinak kihasználásával javĂthatja a kĂłdmegosztást, a build teljesĂtmĂ©nyt Ă©s a fejlesztĹ‘k egyĂĽttműködĂ©sĂ©t, ami mĂ©retezhetĹ‘ Ă©s karbantarthatĂł frontend alkalmazásokat eredmĂ©nyez. Az Nx átvĂ©tele egyszerűsĂtheti a fejlesztĂ©si folyamatot, Ă©s jelentĹ‘s termelĂ©kenysĂ©gnövekedĂ©st eredmĂ©nyezhet a csapat számára, kĂĽlönösen összetett Ă©s nagymĂ©retű projektek esetĂ©n. Ahogy a frontend környezet folyamatosan fejlĹ‘dik, a monorepo fejlesztĂ©s elsajátĂtása az Nx-szel egyre Ă©rtĂ©kesebb kĂ©szsĂ©ggĂ© válik a frontend mĂ©rnökök számára.
Ez az ĂştmutatĂł átfogĂł áttekintĂ©st nyĂşjtott a frontend Nx munkaterĂĽlet fejlesztĂ©sĂ©rĹ‘l. A bevált gyakorlatok követĂ©sĂ©vel Ă©s a haladĂł fogalmak felfedezĂ©sĂ©vel felszabadĂthatja az Nx teljes potenciálját, Ă©s csodálatos frontend alkalmazásokat Ă©pĂthet.