npm ist der Standardpaketmanager für Node.js. Dabei hat Facebook bereits seit längerem eine alternative Paketverwaltungslösung namens Yarn entwickelt. Yarn scheint aus den Github-Readmes als Standardlösung langsam wieder zu verschwinden und die Stats auf der offiziellen Seite zeigen, dass nur ein Bruchteil der Packages durch Yarn durchgeführt werden. Trotzdem lohnt sich der Blick über den Tellerrand.
Yarn ist vollständig kompatibel zu bestehenden package.json-Dateien – man kann also ohne Probleme die beiden Lösungen für bestehende Projekte benutzen. Die Kommandos der beiden Lösungen unterscheiden sich dabei nur marginal. Anbei folgt eine Gegenüberstellung der wichtigsten Kommandos:
Beschreibung | npm | Yarn |
Initialisieren | npm init | yarn init |
Update | npm install -g npm | yarn self-update |
Paket installieren | npm install --save [name] | yarn add [name] |
Paket installieren | npm install --save-dev [name] | yarn add --dev [name] |
Paket global installieren | npm install -g [name] | yarn global add [name] |
Alle Pakete installieren | npm install | yarn install |
Alle Pakete aktualisieren | npm update | yarn upgrade |
Paket deinstallieren | npm remove [name] | yarn remove [name] |
Yarn ist mit dem Ziel angetreten, einige Schwachpunkte von npm zu lösen. Der offensichtlichste Unterschied ist die höhere Performance: Durch inkrementelle Installationen, Multithreading und dem neuesten Killer-Feature Plug'n'Play (PNP) steigt die Performance drastisch an. Plug'n'Play verwirft dabei die Idee eines projektbasierten node_modules-Ordner, der in der Anzahl der Dateien oft in astronomische Höhen wachsen kann. Mehr dazu findet man im offiziellen Whitepaper zu Plug'n'Play. Wir installieren eslint einmal mit npm und dann mit yarn mit jeweils aufgewärmten Cache, um den Unterschied in der Geschwindigkeit (6x!) deutlich zu machen: