Yarn2 – schneller, stabiler und moderner
Die neue Version des Paketmanagers Yarn bietet zahlreiche Neuerungen und Verbesserungen fĂĽr Entwickler, allerdings auch einige Breaking Changes.
- Sebastian Springer
Nach einiger Entwicklungszeit ist mit Yarn2 eine neue Version des JavaScript-Paketmanagers erschienen. Er ist aktuell die populärste Alternative zum Platzhirsch NPM und folgt bei seinen Releases dem Semantic-Versioning-Ansatz. Die Veröffentlichung der Version 2 bringt folglich Breaking Changes mit. Allerdings bietet die Version ebenso zahlreiche neue Funktionen und Verbesserungen. Es lohnt sich, zunächst einen Blick auf die Entwicklung von Yarn zu werfen.
Yarn sollte ursprĂĽnglich das Ziel verfolgen, die Probleme zu beheben, die NPM zum damaligen Zeitpunkt hatte:
- Geschwindigkeit: Yarn führte eine Caching-Ebene für die Installation von Paketen sowie die Möglichkeit von parallelen Downloads ein, um die Installation von Paketen und ihre Abhängigkeiten zu beschleunigen.
- Sicherheit: Bis zur Einführung von Yarn war es für Angreifer möglich, die Inhalte von Paketen bei der Installation zu manipulieren. Bei gleichbleibender Versionsnummer ist die Veränderung nicht aufgefallen. Bei der initialen Installation eines Pakets erstellt Yarn sowohl für das Paket als auch für sämtliche Abhängigkeiten je eine Prüfsumme und speichert sie in der "yarn.lock"-Datei. Bei jeder folgenden Installation kommt es zur Prüfung. Das schließt schadhafte Manipulationen aus.
- Zuverlässigkeit: Yarn enthält in seiner "lock"-Datei nicht nur die Prüfsummen der Pakete, sondern auch die exakten Versionsnummern und die Links zu den Paketquellen. Das stellt sicher, dass jede Installation gleich ist und es nicht durch die Änderung einer Abhängigkeit zu unerwünschten Nebeneffekten kommt.
Die Entwickler von NPM haben diese Funktionen ebenfalls übernommen, sodass sich mittlerweile ein Kopf-an-Kopf-Rennen zwischen den beiden Paketmanagern entwickelt hat. NPM hat in der Zwischenzeit mit Features wie npx nachgelegt. Das ist ein Package Runner zum Ausführen von NPM-Paketen. Das ist vor allem für ausführbare Pakete relevant, also für viele Werkzeuge auf Node.js-Basis. npx prüft, ob eine lokale Version des Pakets vorhanden ist und führt sie aus. Ist das nicht der Fall, lädt er das Paket herunter, führt es aus und verwirft es anschließend wieder. Eine weitere neue Funktion ist der Security-Befehl npm audit
zum Überprüfen der installierten Abhängigkeiten auf bekannte Sicherheitsprobleme.
Nachdem NPM und Yarn mittlerweile annähernd das gleiche Maß an Zuverlässigkeit und Sicherheit erreicht haben, ist das ausschlaggebende Unterscheidungskriterium die Installationsgeschwindigkeit. Die Entwickler von Yarn haben bereits in Version 1 das Feature Plug'n'Play eingeführt, kurz pnp. Es sorgt dafür, dass der letzte Schritt der Paketinstallation entfällt, also das Kopieren der heruntergeladenen Dateien in das lokale "node_modules"-Verzeichnis. Die aktuelle Version des Paketmanagers greift das Feature auf und setzt es standardmäßig ein.
Installationsprozess nach den Breaking Changes
Die Breaking Changes in Yarn2 führen zu einer Reihe von Problemen, die die Verteilung und Adaption des Paketmanagers etwas beeinträchtigen. Das ist der Hauptgrund, warum die Verteilung der neueren Version über die globale Installation mit NPM begann.
Entwickler können die neue Version mit npm install -g yarn@berry
installieren. @berry
steht hierbei für den Release-Namen. Mit Werkzeugen wie dem Node-Version-Manager nvm können Anwender gleichzeitig mehrere Versionen von Yarn auf einem System betreiben. Die weiteren Installationsmöglichkeiten wie einen Windows Installer, Homebrew, Chocolatey und Linux-Pakete, verspricht das Yarn-Team zeitnah.
Verwendung von Yarn
Die grundlegenden Kommandos haben sich zwischen den Versionen nicht geändert:
init
: Initialisiert ein Projekt, indem der Befehlt eine minimale Version einer "package.json"-Datei erzeugt. Eine Änderung zur Vorgängerversion besteht darin, dass an die Stelle eines interaktiven Prozesses zur Erstellung der "package.json"-Datei ein automatisierter Prozess getreten ist, der lediglich den Namen der Applikation setzt.add
: Installiert ein Paket. Yarn fügt es in die "package.json"-Datei und in die "yarn.lock"-Datei ein. Außerdem lädt der Paketmanager den Quellcode herunter und fügt ihn dem Yarn-Cache hinzu.remove
: Entfernt ein installiertes Paket und seine Abhängigkeiten aus der Applikation. Das manuelle Entfernen eines Pakets ist nicht empfehlenswert, da Entwickler das Paket und seine Abhängigkeiten löschen und aus den Konfigurationsdateien entfernen müssen.