Ein Monorepo ist ein einzelnes Repository, in dem mehrere Projekte oder Pakete gemeinsam liegen, etwa eine Website, eine App und die Bibliotheken, die beide nutzen. Das Gegenstück sind getrennte Repositories für jedes Projekt.
- Monorepo
Ein gemeinsames Repository für mehrere Projekte oder Pakete, die zusammen versioniert werden.
Beispiel: „Website, App und die gemeinsame Komponentenbibliothek liegen in einem Monorepo, eine Änderung am Button erreicht alle drei mit einem Commit.“Auch: Monorepository.
Verwandt: Repository, der Speicherort für Code und seine Geschichte.
Was für ein Monorepo spricht
Änderungen, die mehrere Projekte betreffen, landen in einem Schritt. Wer eine gemeinsame Bibliothek ändert, sieht sofort, welche Projekte davon betroffen sind, und passt sie im selben Commit an.
Dazu kommen einheitliche Werkzeuge. Codestil, Tests und Abhängigkeiten werden einmal festgelegt und gelten für alle. Google arbeitet bekanntermaßen mit einem riesigen Monorepo, und auch Symfony entwickelt alle Komponenten in einem Repository und verteilt sie automatisch in einzelne Pakete.
Werkzeuge für ein Monorepo
Ab einer gewissen Größe braucht es Hilfe, damit nicht jeder Test und jeder Bau alles neu anfasst. Werkzeuge wie Turborepo, Nx oder die Workspaces von npm und pnpm erkennen, welche Pakete sich geändert haben, und bauen nur diese.
Wann ein Monorepo nicht passt
Wenn Projekte nichts miteinander zu tun haben oder unterschiedlichen Teams mit getrennten Rechten gehören. Dann bringt ein Monorepo nur Größe und lange Ladezeiten in Git, ohne dass die Projekte etwas teilen.
Auch das Deployment wird anspruchsvoller, weil eine Änderung im Repository nicht jedes Projekt betrifft und die Pipeline das erkennen muss.