Yarn 2 – die Zukunft der Paketmanager für JavaScript?
3. April 2020
0 Min. LesezeitWas ist Yarn 2?
Yarn 2 ist die neue Version des revolutionären und etablierten npm-Paketmanagers Yarn. Sie bietet Verbesserungen wie Plug’n’Play, eine Plugin-Architektur, Monorepos, eine verbesserte Workspace-Unterstützung und Zero-Installs. Das Community-Repository finden Sie auf GitHub unter: https://github.com/yarnpkg/berry.
Warum brauchten wir eine neue Yarn-Version?
Yarn 2 hakt einige Kästchen auf der Liste der Themen ab, über die Entwicklerinnen und Entwickler bei der Verwaltung von JavaScript-Projekten diskutieren:
Monorepos
Ob Sie ein Fan von Monorepos sind oder nicht: Für ihre Verwaltung benötigen Sie eine gute Auswahl an Toolchains, damit große Projekte und komplexe Workflows erfolgreich und ohne Probleme umgesetzt werden können.
Ein beliebtes Rezept für die Einrichtung eines Monorepos für JavaScript-Projekte ist die Kombination aus Yarn Workspaces (seit Yarn 1 verfügbar) und Lerna als Projektmanager.
Die gute Nachricht bei Yarn 2: Yarn fungiert jetzt sowohl als Paketmanager als auch als Projektmanager und möchte eine umfassende Lösung für die reibungslose Verwaltung von Monorepos bieten.
Plug’n’Play
Was wurde über node_modules noch nicht gesagt? Die neue Yarn-Dokumentation geht ausführlicher auf die Nachteile von node_modules als Ordnerstruktur ein und erläutert, warum wir eine neue Denkweise für die Verwaltung von Abhängigkeiten brauchen.
Die Plug’n’Play-Strategie ist nicht nur der neuen Yarn-Version vorbehalten, sondern wurde bereits zuvor im Ökosystem eingesetzt. Kat Marchán stellte Tink 2019 auf der JSConf EU in ihrem Vortrag vor. Das bedeutet allerdings nicht, dass Tinks Plug’n’Play-Ansatz mit dem von Yarn identisch ist. Es lohnt sich jedoch, daran zu erinnern, dass sich diese Ideen schon seit einiger Zeit mit verschiedenen Experimenten in unserem JavaScript-Ökosystem verbreiten.
Ein interessanter Sicherheitsaspekt bei der Implementierung von Plug’n’Play in Yarn 2:
Der lokale Cache-Ordner .yarn/cache wird schreibgeschützt eingebunden. So werden böswillige Versuche verhindert, bereits installierte Pakete im Dateisystem zu verändern.
Dank der Funktionsweise von Plug’n’Play in Yarn kann Yarn strenge Prüfungen durchführen. So wird beispielsweise verhindert, dass Pakete auf sogenannte Phantom-Pakete verweisen, die nicht in der Abhängigkeitsliste eines Pakets oder Projekts aufgeführt sind.
Plugins
Vielleicht ist das eher aus der Perspektive von Entwicklern und Maintainerinnen relevant als für Endnutzer, aber dennoch wichtig. Bei der Entwicklung von Yarn 2 mit TypeScript bot sich die Gelegenheit, auch die Komplexität und den Wartungsaufwand des Kerns zu verringern. Dafür wurde eine Plugin-Architektur geschaffen, mit der andere Yarn erweitern können.
Noch mehr Funktionen?
In seiner Ankündigung der Veröffentlichung von Yarn 2 auf dev.to gab Maël Nison viele Einblicke in die Funktionen und möglichen Fallstricke, die Yarn 2 zur richtigen Wahl für künftige JavaScript- und Node.js-Projekte machen. Ich empfehle Ihnen, seinen Beitrag zur Veröffentlichung sowie die offizielle Funktionsübersicht von Yarn zu lesen, um weitere Gründe zu erfahren.
Erste Schritte mit Yarn 2
Yarn setzt auf eine Installationsstrategie pro Repository – oder, wenn Sie so möchten, pro Projekt. Das bedeutet, dass Sie Yarn global installieren können, etwa die erste, klassische Yarn-Version, und anschließend für ein bestimmtes Projekt zu Yarn 2 wechseln können.
Für die ersten Schritte mit Yarn 2 benötigen Sie eine aktuelle Node.js-Version, mindestens Node.js 10. In jedem Fall sollte Node.js LTS Ihre bevorzugte Version sein, da sie unterstützt und gewartet wird. Node.js-Versionen vor Version 10 werden nicht mehr unterstützt und erhalten daher weder Fehlerbehebungen noch Sicherheitsupdates.
Zur neuen Yarn-Version wechseln
Erstellen Sie zunächst ein neues Verzeichnis, um ein neues Projekt zu initialisieren:
Ermitteln wir mit yarn --version Ihre aktuelle Yarn-Version. Wenn Sie eine Yarn-Version unter 1.22 verwenden, geben Sie Folgendes ein:
Wenn Ihre lokale Yarn-Version 1.22 oder höher ist:
Dadurch sollte Yarn 2 heruntergeladen und folgende Ausgabe angezeigt werden:
Anschließend können Sie Ihre Yarn-Version mit yarn --version überprüfen. Bei mir wird Folgendes angezeigt:
Wie üblich empfiehlt es sich, .yarnrc und .yarnrc.yml einzuchecken, damit die Konfiguration im gesamten Repository geteilt wird. Interessant ist hier die Verwendung des Ordners .yarn, in dem Yarn den Cache, die Yarn-Laufzeitumgebung, Plugins und weitere Daten verwaltet.
Wenn Sie die Richtlinie für Yarn 2 aktualisieren, wird eine Kopie der neuesten Version in den lokalen Ordner .yarn/ heruntergeladen und eine .yarnrc erstellt, in der der Speicherpfad der installierten Version festgehalten wird.
npm-Module in Yarn 2 installieren
Fügen wir das Node.js-Webframework Fastify zu unseren Abhängigkeiten hinzu:
In der neuen Yarn-Ausgabe sind bereits einige Änderungen zu sehen:
Zusammengehörige Aufgaben, die während des Installationsvorgangs anfallen, werden jeweils gruppiert.
Yarn verweist in der CLI-Ausgabe auf jede Aufgabengruppe. So können Sie Probleme leichter beheben.
Die Lock-Datei ist nach wie vor die bevorzugte Methode, mit der Yarn Abhängigkeiten für wiederholbare und überprüfbare Versionen festschreibt. Neu in Yarn 2 ist jedoch, dass sie jetzt eine korrekte YAML-Syntax verwendet.
Die gängigen Befehle für die Paketverwaltung sind gegenüber früheren Yarn-Versionen unverändert:
yarn add [package] --devyarn remove [package]yarn up [package]
JavaScript oder Node.js mit Yarn ausführen
Da es kein node_modules-Verzeichnis mehr gibt, funktioniert das Ausführen eines einmaligen Skripts wie node script.js nicht mehr: Die darin angegebenen Abhängigkeiten können nicht aufgelöst werden. Deshalb müssen Sie yarn node script.js ausführen. Dabei startet Yarn den Node-Prozess mit einer eigenen Datei, die Teile der Logik anpasst und so die PnP-Magie ermöglicht. Dafür wird das integrierte CLI-Flag --require von Node verwendet.
Beachten Sie außerdem, dass yarn node in Skripten, die im Feld scripts definiert sind, nicht erforderlich ist (so werden ohnehin viele Tools aufgerufen). Es reicht, einfach node aufzurufen. Danke, Mael, für die Klarstellung!
Wie geht es weiter?
Yarn 2 muss sich noch bewähren und von der Community geprüft werden. Erst dann wird sich zeigen, ob es sich langfristig behauptet und für die neuen Ideen, die es umsetzt und weiterentwickelt, Anerkennung in der JavaScript-Community findet.
Wenn Sie Yarn in Ihrem nächsten Projekt ausprobieren, finden Sie die ausführliche Dokumentation auf der Yarn-Website unter https://yarnpkg.com/cli/install.
Starten Sie mit Capture-the-Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.



