Afhængighedsstyring i monorepos
Udforsk teknikker til håndtering af interne og eksterne afhængigheder på tværs af flere projekter i et monorepo
Afhængighedsstyring i monorepos er en gratis Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret Git: Monorepoer, undermoduler og arbejdsgange, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.
Monorepo-afhængigheder forklaret
Velkommen til administration af afhængigheder i monorepoer! I et monorepo ligger mange projekter samlet i ét Git-repositorium.
Denne opsætning giver særlige udfordringer og fordele for den måde, projekterne deler kode og er afhængige af hinanden på.
- Interne afhængigheder: Når ét projekt i monorepoet bruger kode fra et andet projekt i samme monorepo.
- Eksterne afhængigheder: Når projekter bruger tredjepartsbiblioteker eller frameworks (f.eks. React eller Lodash).
Interne afhængigheder: Deling af kode
En af de største fordele ved et monorepo er nem deling af kode. Forestil dig, at du har et delt bibliotek med UI-komponenter og flere applikationer, der bruger det.
I stedet for at publicere og bruge det som en separat pakke kan du referere direkte til det i monorepoet.
Det forenkler udvikling og test og sikrer ensartethed på tværs af dine applikationer.
Eksterne afhængigheder: Tredjepartsbiblioteker
Ligesom alle andre projekter er projekter i et monorepo ofte afhængige af eksterne open source-biblioteker. Tænk på populære værktøjer som Node.js-pakker (f.eks. Express og Axios) eller Java-biblioteker (f.eks. Spring Boot og Guava).
Det kan være vanskeligt at administrere dem. Forskellige projekter kan have brug for forskellige versioner af det samme eksterne bibliotek, eller du vil måske gennemtvinge én version på tværs af alle projekter for at sikre ensartethed.
Pakkestyringsværktøjer og arbejdsområder
Til sprog som JavaScript er pakkestyringsværktøjer som npm, Yarn eller pnpm uundværlige. De introducerer typisk et begreb, der kaldes arbejdsområder.
Arbejdsområder giver dig mulighed for at administrere flere pakker i én enkelt rod-package.json. Det gør det muligt at:
- Centralisere installationen af afhængigheder.
- Oprette nemme krydshenvisninger til interne pakker.
- Optimere brugen af diskplads.
Arbejdsområders hoisting forklaret
En vigtig funktion i monorepoers pakkestyringsværktøjer er hoisting. I stedet for at installere den samme eksterne afhængighed flere gange i hvert projekts node_modules-mappe flyttes den op i rodens node_modules.
Det betyder:
- Der bruges mindre diskplads.
- Installationen går hurtigere.
- Det sikres, at alle projekter bruger den samme version af en afhængighed, der er flyttet op, så risikoen for konflikter mindskes.
Opsætning af npm-arbejdsområder
Lad os se, hvordan du konfigurerer npm workspaces. Du definerer dem i rodens package.json-fil.
Her fortæller vi npm, at det skal lede efter pakker i mappen packages/*. Hver undermappe indeholder sin egen package.json.
{
"name": "my-monorepo",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
],
"scripts": {
"install:all": "npm install"
}
}Brug af interne og eksterne afhængigheder
Lad os nu oprette et enkelt ui-lib- og et app-projekt i mappen packages/. app afhænger af ui-lib og et eksternt bibliotek, lodash.
Bemærk, hvordan ui-lib refereres til med sit pakkenavn i app/package.json.
/* packages/ui-lib/package.json */
{
"name": "ui-lib",
"version": "1.0.0",
"main": "index.js"
}
/* packages/ui-lib/index.js */
export const Button = () => 'Monorepo Button';
/* packages/app/package.json */
{
"name": "app",
"version": "1.0.0",
"dependencies": {
"ui-lib": "*",
"lodash": "^4.17.21"
}
}
/* packages/app/index.js */
import { Button } from 'ui-lib';
import { capitalize } from 'lodash';
console.log(capitalize(Button()));
// Run 'npm install' from root, then 'node packages/app/index.js'Håndtering af versionskonflikter
Hvad nu, hvis ét projekt har brug for lodash@3.x, mens et andet har brug for lodash@4.x?
Monorepo-værktøjer forsøger ofte at samle én enkelt version på et fælles niveau. Hvis der angives forskellige versioner, installerer nogle pakkehåndteringer muligvis flere versioner eller kræver eksplicitte tilsidesættelser.
Bedste praksis: Gå efter én ensartet version af de vigtigste eksterne afhængigheder i hele monorepoet for at undgå komplekse problemer med afhængighedsopløsning og sikre kompatibilitet.
Afhængighedsgraf og værktøjer
Efterhånden som monorepoer vokser, bliver det afgørende at forstå relationerne mellem projekterne. En afhængighedsgraf viser visuelt, hvilke projekter der afhænger af hvilke andre.
Værktøjer som Nx, Lerna og Turborepo genererer disse grafer og hjælper dig med at:
- Identificere kritiske stier.
- Forstå konsekvenserne af ændringer.
- Optimere byggeprocesser ved kun at bygge berørte projekter igen.
Hurtigt tjek: Afhængigheder i monorepoer
Forestil dig et monorepo, der bruger npm workspaces med flere projekter. Hvilke af følgende udsagn om håndtering af afhængigheder er sande?
Opsummering: Suveræn håndtering af monorepo-afhængigheder
Du har lært det grundlæggende i håndtering af afhængigheder i monorepoer!
- Interne afhængigheder fremmer deling af kode og ensartethed.
- Eksterne afhængigheder håndteres effektivt ved hjælp af workspace-funktioner.
- Workspaces og samling på et fælles niveau optimerer installation, diskplads og ensartethed mellem versioner.
- Det er afgørende at forstå afhængighedsgrafen i store monorepoer.
Det er vigtigt at beherske disse teknikker for at kunne bygge skalerbare og vedligeholdelsesvenlige monorepo-projekter.
Lær Avanceret Git: Monorepoer, undermoduler og arbejdsgange med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Afhængighedsstyring i monorepos” gratis?
Ja — hele teksten til “Afhængighedsstyring i monorepos” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset, skal du opgradere til CoddyKit PRO. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Afhængighedsstyring i monorepos”?
Udforsk teknikker til håndtering af interne og eksterne afhængigheder på tværs af flere projekter i et monorepo Du øver dig i Avanceret Git: Monorepoer, undermoduler og arbejdsgange med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Avanceret Git: Monorepoer, undermoduler og arbejdsgange?
Der kræves ingen tidligere erfaring. Avanceret Git: Monorepoer, undermoduler og arbejdsgange på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Afhængighedsstyring i monorepos”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion?
Ja. Alle Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Afhængighedsstyring i monorepos
- Atomiske commits og ændringer på tværs af projekter
- Monorepo-strategier for CI/CD
- Build-caching og builds kun for berørte projekter