<h2>Was sind Package Manager?</h2>
<p>Im Grunde handelt es sich um ein Software-Tool, mit dem man die „Dependencies“ (dt. Abhängigkeiten) im Code verwalten kann. Package-Manager sind beispielsweise in der Lage, Abhä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 Überblick darüber hast, welche die gängigsten Produkte sind, werden sie in diesem Artikel miteinander verglichen. Dabei liegt der Fokus im Vergleich der Performance, Sicherheit und Unterstützung. Am Ende dieses Artikels wirst du in der Lage sein zu entscheiden, welchen der Package Manager du auf jeden Fall einmal ausprobieren könntest. </p>
<h3>Npm</h3>
<p>Dabei handelt es sich um einen Package Manager, welcher standardmäßig mit Node.js kommt. Da Node.js im Backend verwendet wird und JavaScript im Frontend wurde npm ebenfalls hier ein nü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 „npm inc“ im Jahr 2014 gegründet. Mittlerweile besitzt npm das größte Open Source Repository mit über 350.000 Paketen.</p>
<p>Zu den Vorteilen von npm gehören zum einem das automatische Generieren der package-lock.json Datei. Dadurch sind andere Entwickler in der Lage, die Abhä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ängigkeiten lokal zu installieren. Man kann sich die Datei einfach über den Befehl npm install --package-lock von npm automatisch anlegen lassen. Des Weiteren ist es mit npm mit Leichtigkeit möglich, lokale oder globale Abhängigkeiten zu verwalten. Zudem kann man gleichzeitig mehrere Versionen von Abhä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ösen, die npm noch nicht konnte. So war das wichtigste Ziel, die Sicherheits- und Leistungsprobleme in großen Codebasen zu lösen. </p>
<p>Yarn liefert Entwicklern, die damit arbeiten, viele Vorteile. So werden zum einem Probleme behoben, die in einem Monorepo auftreten würden, wenn man mit npm arbeitet. Zu den Klassischen Problemen gehört hierbei das Aktualisieren der package.json mehrerer Pakete. Mit npm mü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ßer Vorteil liegt in dem Offline-Cache-Mechanismus. Der sorgt dafür dass, wenn man sich zum ersten Mal ein Packet installiert, dieser im cache abgelegt wird. Dadurch muss man sich die Pakete nicht für jedes Projekt von neuem installieren, denn wenn man das Packet an einer anderen Stelle benötigt, wird dieser aus dem lokalem cache abgerufen. Zusätzlich bietet Yarn einen eingebauten Lizenzen Manager an. Der Manager prüft in Projekten, ob auch alle Lizenzen für die verschiedenen Pakete vorhanden sind. Dies kann sehr nü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 ä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ührt dazu, dass man diese zum einem nicht immer fü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ücken zu beheben. Aus diesem Grund wurde ein strenger Zugriffskontrollmechanismus entwickelt. Das sorgt dafür, dass nur auf Abhä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üst der Manager pnpm und yarn wurde auf npm aufgebaut. Aus diesem Grund sind die meisten befehle sehr ä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&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=""> </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 ähnlich aufgebaut. Das Einzige was auffällt ist, dass die beiden pnpm und Yarn etwas moderner aussehen als npm. Jedoch ändert dies nichts an der Benutzerfreundlichkeit.</p>
<h3>Leistung</h3>
<p>Bezü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ü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ät Offline-Download an. Diese nützliche Funktion ermöglicht es, Pakete zu installieren, ohne dass eine Internetverbindung nötig ist. 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ötig, fü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ür die Angreifer möglich, die Besitzer verschiedener Pakete zu ä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ötig ist.</p>
<p>Aus diesen Gründen hat Yarn eine deutlich striktere Sicherheit an den Tag gelegt. In Yarn müssen veröffentlichte Pakete erst einmal ü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üfen, ob zwei Dateien gleich sind oder nicht. Das Ganze passiert, bevor man den Code ausführt. Dadurch wird jede Möglichkeit einer Paketentfü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ängigkeiten zu verwenden, die auch in ihr definiert sind.</p>
<h3>Unterstützung von Monorepos</h3>
<p>Monorepos werden häufig von größeren Technologieunternehmen bevorzugt. Die beiden Package Manager Yarn und Pnpm unterstützen diese vollständig. Jedoch wurde npm entwickelt, um einzelne Projekte zu verwalten. Aus diesem Grund gibt es noch keine Funktionen zur Unterstützung von Monorepos.</p>
<h2>Fazit</h2>
<p>Für kleinere Projekte eignet sich fü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üllen. Jedoch sollte man immer im Hinterkopf behalten das Yarn von Facebook stammt und stets Nutzer Daten an Facebook sendet.</p>
</div>