Yarn2 – schneller, stabiler und moderner

Seite 3: Workspaces in Yarn

Inhaltsverzeichnis

Ein erwähnenswertes Feature sind die Workspaces von Yarn. Sie gewährleisten eine bessere Unterstützung von Monorepos. Ein Monorepo ist im einfachsten Fall ein Repository, das mehrere Subprojekte enthält, die miteinander in Zusammenhang stehen.

Die Worktree-Definition, also die Definition des Konstrukts, das die einzelnen Workspaces umfasst, findet im übergeordneten Verzeichnis in einer zusätzlichen "package.json"-Datei statt. Innerhalb derer erfolgt die Definition einer workspaces-Eigenschaft, die auf die einzelnen Pakete verweist. Jeder Workspace verfügt wiederum über eine eigene "package.json"-Datei.

Die einzelnen Workspaces sind strikt voneinander getrennt. Das bedeutet, dass jeder nur auf seine eigenen Abhängigkeiten zugreifen kann. Die einzelnen Workspaces können sich untereinander als Dependency referenzieren. Das workspace-Protokoll referenziert Pakete innerhalb des Workspaces in der package.json-Datei und löst sie beim Publizieren auf.

Die neue Version von Yarn verfügt über das Kommando yarn workspaces foreach, das die Ausführung von Befehlen in den verschiedenen Workspaces erlaubt. Die einzelnen Workspaces kann Yarn entweder sequenziell oder parallel abarbeiten.

Auch der Release-Prozess eines Worktrees hat Yarn2 angepasst. Es adressiert einige Probleme, die durch den Einsatz von Monorepos entstehen. Damit Entwickler dieses Feature verwenden können, müssen sie zunächst das Version-Plug-in mit dem Befehl yarn plugin import version installieren. Damit aktualisiert das Kommando yarn version in einem Workspace auch die Versionsnummern aller Workspaces, die von einem Workspace abhängen. Im Gegensatz dazu arbeiten andere Werkzeuge im selben Bereich mit einem pauschalen Erhöhen der Versionsnummer aller Pakete im Worktree. Außerdem erlaubt die defer-Option des yarn version-Kommandos, einen Versionssprung noch nicht direkt durchzuführen, sondern ihn zunächst zu planen.

Der Befehl yarn version apply aktualisiert die Version im Projekt entsprechend. yarn version check hilft gerade bei umfangreichen Worktrees mit mehreren Entwicklern dabei, die Übersicht zu bewahren. Das Kommando prüft die einzelnen Workspaces auf Änderungen und wirft einen Fehler, falls eine Änderung vorliegt, aber die Versionsnummer nicht erhöht wurde.

Der Sprung auf die neue Version funktioniert in vielen Fällen ohne Probleme. Am häufigsten kommt es zu Schwierigkeiten bei den Paketgrenzen, die Yarn mittlerweile deutlich strikter handhabt. Die Entwickler von Yarn stellen mit dem Yarn Doctor ein Werkzeug zur Verfügung, das ein Projekt auf potenzielle Pobleme prüfen kann.

Im einfachsten Fall führen Entwickler den Yarn Doctor mit yarn dlx @yarnpkg/doctor aus und beheben die aufgelisteten Probleme. Anschließend können sie ein bestehendes node_modules löschen und die Abhängigkeiten mit yarn neu installieren. Die wichtigste Änderung ist das ".yarn"-Verzeichnis, das der Paketmanager erzeugt. Im Unterverzeichnis "cache" liegt der Paket-Cache, der das Zero-Installs-Konzept ermöglicht. Zusätzlich erzeugt Yarn die ".pnp.js"-Datei, mit der die über PnP aufgelösten Abhängigkeiten in der Applikation verwendet werden können.

In der Dokumentation findet sich eine ausführliche Migrations-Anleitung, die zahlreiche Problemstellungen adressiert und einige Best Practices dokumentiert.