Yarn2 – schneller, stabiler und moderner

Die neue Version des Paketmanagers Yarn bietet zahlreiche Neuerungen und Verbesserungen fĂĽr Entwickler, allerdings auch einige Breaking Changes.

In Pocket speichern vorlesen Druckansicht 19 Kommentare lesen
Yarn2 – schneller, stabiler und moderner

(Bild: Shutterstock.com)

Lesezeit: 15 Min.
Von
  • Sebastian Springer
Inhaltsverzeichnis

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.

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.

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.