Geavanceerde Git: monorepo's, submodules en werkstromen · Les

Afhankelijkheidsbeheer in monorepo's

Verken technieken voor het beheren van interne en externe afhankelijkheden in meerdere projecten binnen een monorepo.

Les 1 van 411 stappen

Afhankelijkheidsbeheer in monorepo's is een gratis Geavanceerde Git: monorepo's, submodules en werkstromen-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Geavanceerde Git: monorepo's, submodules en werkstromen. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Geavanceerde Git: monorepo's, submodules en werkstromen bevat in totaal 4 lessen.

Afhankelijkheden in monorepo's uitgelegd

Welkom bij afhankelijkheidsbeheer in monorepo's! In een monorepo staan veel projecten samen in één Git-repository.

Deze opzet brengt unieke uitdagingen en voordelen met zich mee voor de manier waarop deze projecten code delen en van elkaar afhankelijk zijn.

  • Interne afhankelijkheden: wanneer een project in de monorepo code gebruikt van een ander project in dezelfde monorepo.
  • Externe afhankelijkheden: wanneer projecten bibliotheken of frameworks van derden gebruiken (zoals React of Lodash).

Interne afhankelijkheden: code delen

Een van de grootste voordelen van een monorepo is dat je eenvoudig code kunt delen. Stel je voor dat je een gedeelde bibliotheek met UI-componenten en meerdere applicaties hebt die deze gebruiken.

In plaats van deze als een afzonderlijk package te publiceren en te gebruiken, kun je er rechtstreeks binnen de monorepo naar verwijzen.

Dit vereenvoudigt ontwikkeling en tests en zorgt voor consistentie tussen je applicaties.

Externe afhankelijkheden: bibliotheken van derden

Net als elk project zijn projecten in een monorepo vaak afhankelijk van externe opensourcebibliotheken. Denk aan populaire hulpmiddelen zoals Node.js-packages (bijvoorbeeld Express en Axios) of Java-bibliotheken (bijvoorbeeld Spring Boot en Guava).

Het beheren hiervan kan lastig zijn. Verschillende projecten hebben mogelijk verschillende versies van dezelfde externe bibliotheek nodig, of je wilt voor consistentie één versie afdwingen voor alle projecten.

Pakketbeheerders en werkruimten

Voor talen zoals JavaScript zijn pakketbeheerders zoals npm, Yarn of pnpm essentieel. Deze introduceren meestal een concept met de naam workspaces.

Met workspaces kun je meerdere packages beheren binnen één package.json in de hoofdmap. Dit maakt het volgende mogelijk:

  • Gecentraliseerde installatie van afhankelijkheden.
  • Eenvoudig verwijzen naar interne packages.
  • Geoptimaliseerd gebruik van schijfruimte.

Workspace-hoisting uitgelegd

Een belangrijke functie van pakketbeheerders voor monorepo's is hoisting. In plaats van dezelfde externe afhankelijkheid meerdere keren te installeren in de map node_modules van elk project, wordt deze naar de hoofdmap node_modules 'gehesen'.

Dit betekent:

  • Minder gebruikte schijfruimte.
  • Snellere installatietijden.
  • Alle projecten gebruiken dezelfde versie van een gehoiste afhankelijkheid, waardoor mogelijke conflicten worden beperkt.

npm-workspaces instellen

We bekijken hoe je npm-workspaces configureert. Je definieert ze in het bestand package.json in de hoofdmap.

Hier vertellen we npm dat het naar pakketten moet zoeken in de map packages/*. Elke submap bevat een eigen package.json.

{
  "name": "my-monorepo",
  "version": "1.0.0",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "scripts": {
    "install:all": "npm install"
  }
}

Interne en externe afhankelijkheden gebruiken

Maak nu een eenvoudig project ui-lib en een project app in onze map packages/. app is afhankelijk van ui-lib en van een externe bibliotheek, lodash.

Let erop dat naar ui-lib wordt verwezen met de pakketnaam in 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'

Versieconflicten beheren

Wat doe je als het ene project lodash@3.x nodig heeft en een ander project lodash@4.x?

Hulpmiddelen voor monorepo's proberen vaak één versie naar een hoger niveau te verplaatsen. Als verschillende versies zijn opgegeven, installeren sommige pakketbeheerders mogelijk meerdere versies of vereisen ze expliciete overschrijvingen.

Best practice: streef naar één consistente versie van belangrijke externe afhankelijkheden in de hele monorepo. Zo voorkom je complexe problemen bij het oplossen van afhankelijkheden en zorg je voor compatibiliteit.

Afhankelijkheidsgraaf en hulpmiddelen

Naarmate monorepo's groeien, wordt het cruciaal om de relaties tussen projecten te begrijpen. Een afhankelijkheidsgraaf brengt visueel in kaart welke projecten afhankelijk zijn van welke andere projecten.

Hulpmiddelen zoals Nx, Lerna en Turborepo genereren deze grafen en helpen je om:

  • kritieke paden te identificeren;
  • de impact van wijzigingen te begrijpen;
  • bouwprocessen te optimaliseren door alleen gewijzigde projecten opnieuw te bouwen.

Korte controle: afhankelijkheden in een monorepo

Stel dat je een monorepo met npm-workspaces en meerdere projecten gebruikt. Welke van de volgende uitspraken over het beheer van afhankelijkheden zijn juist?

Samenvatting: afhankelijkheden in monorepo's beheersen

Je hebt de basis van afhankelijkheidsbeheer in monorepo's geleerd!

  • Interne afhankelijkheden stimuleren het delen van code en consistentie.
  • Externe afhankelijkheden worden efficiënt beheerd met workspacefuncties.
  • Workspaces en het naar een hoger niveau verplaatsen van afhankelijkheden optimaliseren de installatie, schijfruimte en consistentie van versies.
  • Inzicht in de afhankelijkheidsgraaf is essentieel voor grote monorepo's.

Het beheersen van deze technieken is belangrijk voor het bouwen van schaalbare en onderhoudbare monorepo-projecten.

Gratis beginnen

Leer Geavanceerde Git: monorepo's, submodules en werkstromen met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Afhankelijkheidsbeheer in monorepo's” gratis?

Ja — de volledige tekst van “Afhankelijkheidsbeheer in monorepo's” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Geavanceerde Git: monorepo's, submodules en werkstromen wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Geavanceerde Git: monorepo's, submodules en werkstromen bevat in totaal 4 lessen.

Wat leer ik in “Afhankelijkheidsbeheer in monorepo's”?

Verken technieken voor het beheren van interne en externe afhankelijkheden in meerdere projecten binnen een monorepo. Je oefent met Geavanceerde Git: monorepo's, submodules en werkstromen door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Geavanceerde Git: monorepo's, submodules en werkstromen te beginnen?

Ervaring vooraf is niet nodig. Geavanceerde Git: monorepo's, submodules en werkstromen op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Afhankelijkheidsbeheer in monorepo's”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Geavanceerde Git: monorepo's, submodules en werkstromen?

Ja. Elke les over Geavanceerde Git: monorepo's, submodules en werkstromen bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Afhankelijkheidsbeheer in monorepo's
  2. Atomaire commits en wijzigingen tussen projecten
  3. CI/CD-strategieën voor monorepo's
  4. Buildcaching en builds van alleen gewijzigde projecten
← Terug naar Geavanceerde Git: monorepo's, submodules en werkstromen