Ein Monorepo mit Lerna und Yarn Workspaces vereinfacht die Verwaltung von Multi-Package-Repositories. Wenn zum Beispiel ein Framework aus vielen unabhängigen Paketen besteht, wäre ein einzelnes Git-Repository für jedes Paket ein Nachteil. Es würde zu viele npm-Links und in der CI-Umgebung zu viele Projekte geben. Die Arbeit mit komplexeren Projekten wird schnell unübersichtlich, wenn Sie für jedes Package ein eigenes Git-Repo verwalten. Neue Funktionen können viele Pakete betreffen, viele Pull-Requests sind die Folge. Mit diesen beiden Managing-Tools lassen sich die Nachteile vermeiden.
Multi-Package-Repositories mit Yarn und Lerna erstellen
Lerna und Yarn Workspaces ermöglichen das Bauen von Bibliotheken und Apps in einem sogenannten Multi-Package-Repositories, auch Monorepositorie oder Monorepos genannt.
Der Vorteil: Sie verwalten nicht jedes Package in einem eigenen Git-Repository, sondern bündeln zusammengehörige Packages in einem einzigen Repository. Die Npm-Veröffentlichung ist nicht nötig und der Build-Prozess für alle Module stark vereinfacht. Komponenten lassen sich lokal teilen und Sie können Code-Test-Debug-Arbeitsabläufe schneller durchlaufen.
Was ist Lerna?
Das Tool Lerna optimiert den Workflow beim Management von Multi-Package-Repositories mit Git und Npm. Lerna analysiert das Paket und erzeugt die notwendigen Npm-Links automatisch. Intern verwendet Lerna Yarn oder die Npm-CLI zum Bootstrappen. Der Aufwand bei der Versionsverwaltung und Veröffentlichung ist kleiner. Intern ruft Lerna „yarn install“ bzw. „npm install“ für jedes Paket im Projekt auf und erzeugt Symlinks zwischen den Paketen. Große Projekte wie Babel und Jest verwenden Lerna.
Was ist Yarn?
Yarn Workspace ist ein Feature, das Anwendern die Installation von Abhängigkeiten von mehreren package.json-Dateien in Unterordnern einer einzelnen package.json-Wurzeldatei ermöglicht. Mit Yarn lassen sich mehrere Pakete so einrichten, dass Sie zum Installieren nur „yarn install“ aufrufen müssen. Die Abhängigkeiten können verlinkt werden. In der Folge hängen die Workspaces voneinander ab und verwenden immer den aktuellsten zur Verfügung stehenden Code. „Yarn link“ betrifft hingegen nur den Workspace-Baum und nicht das gesamte System. Damit bietet Yarn praktische Vorteile gegenüber Npm.
Lerna & Yarn: Wenn beide Projekte zusammen verwendet werden, delegiert Lerna das Abhängigkeits-Management zu Yarn.
Was muss ich bei Verwendung von Lerna und Yarn beachten?
Wenn Sie mit beiden Tools arbeiten wollen, gilt es Folgendes zu beachten:
- Pakete müssen ihre „devDependencies“ lokal deklarieren, wenn Binaries in den NPM-Skripts verwendet werden sollen.
- npm-Skripts sollten mit Lerna direkt in jedem Paket im Monorepo-Verzeichnis ausführbar sein. Das ist nötig, wenn Skripts im Beobachtungsmodus laufen.
- Lerna übernimmt das Versioning und Publishing, funktioniert aber nicht mit privaten npm-Repositories.
- Arbeitsumgebungen mit Lerna und Yarn erwarten im Repository ein Verzeichnis mit dem Namen „packages“.
Wie funktioniert die Arbeit mit Lerna und Yarn?
Yarn Workspaces eignen sich für Monorepositories, woraus weniger redundante Dateien entstehen. Bei großen Repos ist das Bootstrapping jedoch langsamer als bei der Kombination der beiden Tools. Lerna bietet mit seinen Advanced-Commands wie Scoped-Skripts Vorteile und ermöglicht eine präzisere Konfiguration. Zum Beispiel lässt sich das Generieren von yarn.lock- und package-lock.json-Dateien verhindern.
Fazit
Mit Lerna und Yarn behalten Sie bei komplexen Projekten den Überblick. Node.js-Entwickler, die an Projekten mit komplexer Package-/Repository-Struktur arbeiten, sollten sich die Möglichkeiten genauer anschauen und einen Umstieg in Betracht ziehen.
Bildnachweis: Photo by Dean Pugh on Unsplash