Avanceret Git: Monorepoer, undermoduler og arbejdsgange · Lektion

Afhængighedsstyring i monorepos

Udforsk teknikker til håndtering af interne og eksterne afhængigheder på tværs af flere projekter i et monorepo

Lektion 1 af 411 trin

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.

Gratis at komme i gang

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

  1. Afhængighedsstyring i monorepos
  2. Atomiske commits og ændringer på tværs af projekter
  3. Monorepo-strategier for CI/CD
  4. Build-caching og builds kun for berørte projekter
← Tilbage til Avanceret Git: Monorepoer, undermoduler og arbejdsgange