Auf dem Foto ist ein Setup mit Bildschirmen und Laptops zu sehen. Auf den Bildschirmen sind zahlreiche Codes.

it wissen

04.06.2024

npm, yarn oder pnpm?

Profilbild von Andreas Kottre

Andreas Kottre

CEO & Technical Lead

npmn, yarn, pnpm: Ein Vergleich der gängigen JS Package Manager

<h2>Was sind Package Manager?</h2> <p>Im Grunde handelt es sich um ein Software-Tool, mit dem man die &bdquo;Dependencies&ldquo; (dt. Abh&auml;ngigkeiten) im Code verwalten kann. Package-Manager sind beispielsweise in der Lage, Abh&auml;ngigkeiten einer Software zu installieren oder aktualisieren. Das Ganze funktioniert voll automatisiert und erspart dem Entwickler jede Menge Arbeit und zugleich werden menschliche Fehler minimiert.</p> <p>Das Dilemma, in dem sich die meisten Entwickler befinden, liegt in der Entscheidung des richtigen Package Managers. Damit auch du einen &Uuml;berblick dar&uuml;ber hast, welche die g&auml;ngigsten Produkte sind, werden sie in diesem Artikel miteinander verglichen. Dabei liegt der Fokus im Vergleich der Performance, Sicherheit und Unterst&uuml;tzung. Am Ende dieses Artikels wirst du in der Lage sein zu entscheiden, welchen der Package Manager du auf jeden Fall einmal ausprobieren k&ouml;nntest.&nbsp;</p> <h3>Npm</h3> <p>Dabei handelt es sich um einen Package Manager, welcher standardm&auml;&szlig;ig mit Node.js kommt. Da Node.js im Backend verwendet wird und JavaScript im Frontend wurde npm ebenfalls hier ein n&uuml;tzliches Werkzeug, welches sich auch dort als Standard etabliert hat. Entwickelt wurde es anfangs von Isaac Schlueter, welcher schnell merkte, dass die Nachfrage nach seinem Produkt sehr hoch war. Deswegen hat er das Unternehmen &bdquo;npm inc&ldquo; im Jahr 2014 gegr&uuml;ndet. Mittlerweile besitzt npm das gr&ouml;&szlig;te Open Source Repository mit &uuml;ber 350.000 Paketen.</p> <p>Zu den Vorteilen von npm geh&ouml;ren zum einem das automatische Generieren der package-lock.json Datei. Dadurch sind andere Entwickler in der Lage, die Abh&auml;ngigkeiten Lokal auf ihren Maschinen auf ihren Computer zu Installieren. Da in der Datei alle Versionen der Module dokumentiert werden, sind Entwickler in der Lage, die gleichen Abh&auml;ngigkeiten lokal zu installieren. Man kann sich die Datei einfach &uuml;ber den Befehl npm install --package-lock von npm automatisch anlegen lassen. Des Weiteren ist es mit npm mit Leichtigkeit m&ouml;glich, lokale oder globale Abh&auml;ngigkeiten zu verwalten. Zudem kann man gleichzeitig mehrere Versionen von Abh&auml;ngigkeiten verwalten.</p> <h3>Yarn</h3> <p>Yet Another Resource Negotiator stammt aus einer Kooperation der Firmen Google, Facebook, Exponent und Tilde. Es wurde entwickelt, um damalige Probleme zu l&ouml;sen, die npm noch nicht konnte. So war das wichtigste Ziel, die Sicherheits- und Leistungsprobleme in gro&szlig;en Codebasen zu l&ouml;sen.&nbsp;</p> <p>Yarn liefert Entwicklern, die damit arbeiten, viele Vorteile. So werden zum einem Probleme behoben, die in einem Monorepo auftreten w&uuml;rden, wenn man mit npm arbeitet. Zu den Klassischen Problemen geh&ouml;rt hierbei das Aktualisieren der package.json mehrerer Pakete. Mit npm m&uuml;sste man jede Datei einzeln aktualisieren. Wenn man jedoch mit yarn arbeitet, werden alle Dateien mit nur einem Befehl in einem Repository auf den neusten Stand gebracht. Ein weiterer gro&szlig;er Vorteil liegt in dem Offline-Cache-Mechanismus. Der sorgt daf&uuml;r dass, wenn man sich zum ersten Mal ein Packet installiert, dieser im cache abgelegt wird. Dadurch muss man sich die Pakete nicht f&uuml;r jedes Projekt von neuem installieren, denn wenn man das Packet an einer anderen Stelle ben&ouml;tigt, wird dieser aus dem lokalem cache abgerufen. Zus&auml;tzlich bietet Yarn einen eingebauten Lizenzen Manager an. Der Manager pr&uuml;ft in Projekten, ob auch alle Lizenzen f&uuml;r die verschiedenen Pakete vorhanden sind. Dies kann sehr n&uuml;tzlich sein, wenn es darum geht, Anwendungen kommerziell zu entwickeln.</p> <h3>Pnpm</h3> <p>Pnpm wurde ebenfalls entwickelt, um den Nachteilen von npm entgegenzuwirken. Aus diesem Grund wurde auch pnpm auf die Idee von npm aufgebaut. Pnpm ist kompatibel mit npm. Aus diesem Grund sind die meisten Befehle in pnpm sehr &auml;hnlich wie in npm aufgebaut, und bietet dennoch gewisse Verbesserungen. So werden Pakete an einem bestimmten Ort installiert. Das gelingt ihnen durch ein inhaltsadressierbares Dateisystem. Durch so genannte Symlinks werden die Modulverzeichnisse verwiesen. Dadurch werden Pakete, die identisch sind, nicht mehr mehrfach lokal installiert, sondern wiederverwendet. Das f&uuml;hrt dazu, dass man diese zum einem nicht immer f&uuml;r jedes Projekt neu herunterladen muss, und zum anderen wird der Speicher effizienter verwendet. Zudem war es in der Entwicklung von pnpm sehr wichtig, Sicherheitsl&uuml;cken zu beheben. Aus diesem Grund wurde ein strenger Zugriffskontrollmechanismus entwickelt. Das sorgt daf&uuml;r, dass nur auf Abh&auml;ngigkeiten zugegriffen wird, die in der package.json Datei definiert sind.</p> <h2>Vergleich der Package Manager</h2> <h3>Benutzerfreundlichkeit</h3> <p>Im Grunde bedienen sich alle drei Package Manger gleich. Denn das Grundger&uuml;st der Manager pnpm und yarn wurde auf npm aufgebaut. Aus diesem Grund sind die meisten befehle sehr &auml;hnlich aufgebaut.</p> <div class="gatsby-image-wrapper gatsby-image-wrapper-constrained components__EmbeddedImage-sc-oakuy6-7 jusTSn" data-gatsby-image-wrapper=""><img src="https://typedig.uber.space/assets/c24226a9-17b2-4b7f-997c-3df850f35c14?width=1318&amp;height=410" alt="Bildschirmfoto 2022 03 16 Um 09.54.45 (1)"></div> <div class="gatsby-image-wrapper gatsby-image-wrapper-constrained components__EmbeddedImage-sc-oakuy6-7 jusTSn" data-gatsby-image-wrapper="">&nbsp;</div> <div class="gatsby-image-wrapper gatsby-image-wrapper-constrained components__EmbeddedImage-sc-oakuy6-7 jusTSn" data-gatsby-image-wrapper=""> <p>Wenn es um die CLI (Command Line Interface) eines Package Managers geht, sind alle drei ebenfalls &auml;hnlich aufgebaut. Das Einzige was auff&auml;llt ist, dass die beiden pnpm und Yarn etwas moderner aussehen als npm. Jedoch &auml;ndert dies nichts an der Benutzerfreundlichkeit.</p> <h3>Leistung</h3> <p>Bez&uuml;glich der Geschwindigkeit teilen sich die Package Manager npm und Yarn den zweiten Platz. Lange Zeit war Yarn deutlich schneller als npm, jedoch hat npm in letzter Zeit die L&uuml;cke zu Yarn geschlossen. Den ersten Platz belegt pnpm mit deutlichem Abstand. Der Package Manager ist bis zu drei Mal schneller als die beiden anderen.</p> <p>Pnpm und Yarn bieten den Nutzern die Funktionalit&auml;t Offline-Download an. Diese n&uuml;tzliche Funktion erm&ouml;glicht es, Pakete zu installieren, ohne dass eine Internetverbindung n&ouml;tig ist.&nbsp; Denn dadurch, dass die Packet lokal installiert werden, werden diese - statt immer wieder aus dem Internet heruntergeladen zu werden - aus dem Speicher gezogen. Somit ist es nicht mehr n&ouml;tig, f&uuml;r jedes neue Projekt die Pakete von Neuem herunterzuladen.</p> <h3>Sicherheit</h3> <p>Leider gab es in der Vergangenheit bei npm mehrere Sicherheitsprobleme. Dadurch wurden mehrere Projekte direkt betroffen. So war es f&uuml;r die Angreifer m&ouml;glich, die Besitzer verschiedener Pakete zu &auml;ndern. Des Weiteren wurden die Entwickler selbst auch angegriffen. Das Paket EventStream war in der Lage, Bitcoins von der Lokalen Maschine zu stehlen, ohne dass man es selbst mitbekommen hat. Auch wenn npm nicht so strikt mit Sicherheitsproblemen umgeht, bietet dies auch gewisse Vorteile. Denn dadurch ist man in der Lage, auch mit Paketen zu arbeiten, die als schlecht angesehen werden, falls dies n&ouml;tig ist.</p> <p>Aus diesen Gr&uuml;nden hat Yarn eine deutlich striktere Sicherheit an den Tag gelegt. In Yarn m&uuml;ssen ver&ouml;ffentlichte Pakete erst einmal &uuml;ber Checksums verifiziert werden. Bei Checksums handelt es sich um eine Zeichenkette, die durch Anwendung eines mathematischen Algorithmus auf den Inhalt der Datei erstellt wird. Somit ist man in der Lage zu pr&uuml;fen, ob zwei Dateien gleich sind oder nicht. Das Ganze passiert, bevor man den Code ausf&uuml;hrt. Dadurch wird jede M&ouml;glichkeit einer Paketentf&uuml;hrung vermieden.</p> <p>Pnpm hingegen kombiniert beide Vorteile von Yarn und npm und bietet somit eine noch bessere Sicherheit. Zudem liefert es einen strikten Zugriffskontrollmechanismus, der ein Paket bindet, nur Abh&auml;ngigkeiten zu verwenden, die auch in ihr definiert sind.</p> <h3>Unterst&uuml;tzung von Monorepos</h3> <p>Monorepos werden h&auml;ufig von gr&ouml;&szlig;eren Technologieunternehmen bevorzugt. Die beiden Package Manager Yarn und Pnpm unterst&uuml;tzen diese vollst&auml;ndig. Jedoch wurde npm entwickelt, um einzelne Projekte zu verwalten. Aus diesem Grund gibt es noch keine Funktionen zur Unterst&uuml;tzung von Monorepos.</p> <h2>Fazit</h2> <p>F&uuml;r kleinere Projekte eignet sich f&uuml;r den Einstieg npm sehr gut. Denn es ist nicht ohne Grund eines der meistgenutzten Package Manager auf der Welt. Man sollte aber auch immer stets die Nachteile im Kopf behalten und rechtzeitig zum gegebenen Zeitpunkt im Projekt auf einen anderen umsteigen. Wenn man auf der Suche ist nach einem schnellen und effizienten Speicher Manager ist, eignet sich pnpm.</p> <p>Sollte man auf der Suche sein, wie man ein Monorepo verwalten kann, eignen sich die beiden Package Manager pnpm und Yarn. Beide Manager sind in der Lage die Anforderungen eines Monorepos zu erf&uuml;llen. Jedoch sollte man immer im Hinterkopf behalten das Yarn von Facebook stammt und stets Nutzer Daten an Facebook sendet.</p> </div>

Agiles Management lernen

Profilbild von Andreas Kottre