JavaScript-Paketmanager im Vergleich: Garn, npm oder pnpm?

In der modernen Anwendungsentwicklung schreiben wir nicht alles von Grund auf neu. Stattdessen verwenden wir lieber vorhandene Open-Source-Pakete. Jedes dieser Pakete hat seine eigenen Betreuer und Community. Die Verwendung eines Pakets in unseren Projekten bietet uns einige Vorteile wie schnellere Entwicklung, Zugriff auf neue, regelmäßige Updates und bessere Sicherheit als ein benutzerdefiniertes Skript.

Es ist üblich, dass ein Paket von vielen anderen Paketen abhängt, um korrekt zu funktionieren. Ebenso können lodash auch von anderen Paketen abhängen, aber lodash selbst hängt auch von mehreren Paketen ab. Mit anderen Worten, die verschachtelten Abhängigkeiten können manchmal so komplex werden, dass sie das Abhängigkeitsmanagement nicht manuell handhaben können.

Hier ist ein Paketmanager äußerst nützlich. Paketmanager sind Tools, die automatisch die Abhängigkeiten eines Projekts behandeln.

Ein Paketmanager kann beispielsweise neue Pakete installieren oder vorhandene Pakete mit einem einzigen Befehl aktualisieren. Weil alles automatisiert ist, gibt es keine Chance für menschliches Versagen. Als JavaScript-Entwickler haben wir Zugriff auf mehrere Paketmanager. In diesem Handbuch werden wir jedoch die drei beliebtesten vergleichen:

  • npm
  • Garn
  • pnpm

Überblick über Paketmanager

npm war der erste Paketmanager, der die Konzepte des Registrierungsprotokolls und der Verpackungsstandards einführte. Es wurde bereits 2010 veröffentlicht und offiziell vom Knoten übernommen.js-Team kurz darauf, was der Wendepunkt für npm war.

Nach dem massiven Erfolg von Node.js, npm erhielt auch Traktion von der Entwickler-Community. Es bietet eine Online-Registrierung für JavaScript-Pakete sowie ein Befehlszeilentool, das mit der Registrierung zusammenarbeitet, um Abhängigkeiten zu installieren und zu aktualisieren.

Aber es gibt einige Nachteile von npm, die die Entwicklung von Yarn und pnpm ausgelöst haben. Zum Beispiel ist npm deutlich langsamer als seine Gegenstücke. Es hat auch eine Geschichte von schweren Sicherheitslücken.

Große Tech-Unternehmen wie Facebook und Google zögerten also, npm weiterhin zu verwenden. Im Gegenzug haben sie sich zusammengetan, um eine bessere Version von npm zu entwickeln und es Yarn zu nennen. In der Zwischenzeit hat der ukrainische Entwickler Zoltan Kochan pnpm entwickelt.

Funktionen von npm, Yarn und pnpm

Alle diese Paketmanager sind Open-Source, was bedeutet, dass Sie vollen Zugriff haben, um das Innenleben jedes einzelnen zu überprüfen. Manchmal ist dies sogar eine Anforderung in der Anwendungsentwicklung auf Unternehmensebene.

Vorteile von npm:

  1. Erzeugt automatisch eine package-lock.json Datei. Es ist nützlich, sich an ein Versionskontrollsystem zu binden. Auf diese Weise können andere Entwickler die Abhängigkeiten problemlos auf ihren lokalen Computern installieren
  2. Lokale oder globale Abhängigkeiten problemlos verwalten
  3. npm ist gut gerüstet, um mehrere Versionen von Abhängigkeiten zu verarbeiten
  4. Es verfügt über eine offizielle Registrierung mit mehr Paketen als pypi, rubygems oder packagist

Vorteile von Yarn:

  1. Yarn behebt viele Probleme, die in einem Monorepo auftreten. Wenn Sie beispielsweise mehrere Pakete im selben Repository verwalten und alle über eine separate -Datei verfügen, können Sie alle Pakete mit Yarn problemlos aktualisieren, dank des Konzepts von Arbeitsbereichen, die Abhängigkeiten aller Pakete in einem Repository auf einmal installieren können. Mit npm müssen Sie den Befehl npm install manuell in jedem Paketordner ausführen.
  2. Yarn verwendet einen Offline-Cache-Mechanismus, d. h. wenn Sie ein Paket zum ersten Mal installieren, fügt Yarn es einem Cache-Ordner unter ~/.yarn-cache hinzu. Wenn Sie dieses Paket das nächste Mal benötigen, ruft Yarn es aus dem lokalen Cache ab, anstatt eine HTTP-Anforderung an den Server zu stellen. Diese kleine Verbesserung erhöht die Leistung von Yarn im Vergleich zu npm erheblich
  3. Yarn verwendet auch eine Sperrdatei mit dem Namen yarn.lock, sodass Ihre Projekte für alle Teamkollegen ordnungsgemäß funktionieren. Dieses Konzept wird auch als deterministischer Installationsalgorithmus bezeichnet
  4. Es ist mit einem integrierten Lizenzprüfer ausgestattet, der in verschiedenen Szenarien bei der Entwicklung von Anwendungen nützlich sein kann
  5. Im Gegensatz zu npm verwendet Yarn einen Ansatz namens parallele Downloads. Es ermöglicht Yarn, mehr Ressourcen zu nutzen, um den Build-Prozess zu beschleunigen
  6. Es kann die HTTP-Anforderung im Fehlerfall automatisch wiederholen. Diese Funktion ist besonders nützlich, wenn Sie mit temporären Internetproblemen konfrontiert sind

Vorteile von pnpm:

  1. Es ist mit npm kompatibel, bietet aber auch eine deutlich bessere Speicherplatznutzung und Geschwindigkeit
  2. pnpm installiert alle Pakete an einem einzigen Speicherort und verwendet dann Symlinks, um auf sie zu verweisen. Es führt ein völlig neues Konzept ein, das als inhaltsadressierbares Speichersystem bezeichnet wird und es pnpm ermöglicht, den Unterschied zwischen Dateien zu erkennen. Im Gegenzug dupliziert es keine unveränderten Dateien in zwei verschiedenen Versionen eines Pakets
  3. Seine neueste Version, 5.8.0, führt eine neue Yarn-bash-ähnliche Einstellung namens shell-emulator ein, eine plattformübergreifende Shell-Umgebung
  4. pnpm hat einen strengen Zugriffskontrollmechanismus, was bedeutet, dass ein Paket nur auf die Abhängigkeiten zugreifen kann, die in seiner Datei

Paketmanager-Vergleich

Benutzerfreundlichkeit

npm, Yarn und pnpm bieten fast identische Befehle für ihre verschiedenen Operationen, und sie sind alles einfach zu bedienen. Hier ist ein Beispiel für ihre häufig verwendeten Befehle:

npm Garn pnpm
npm installieren Garn installieren pnpm installieren
npm update Garn upgrade pnpm update

Geschwindigkeit

Es gibt keine Übereinstimmung mit pnpm, wenn es um die Geschwindigkeit und Leistung dieser Paketmanager. Laut einem Benchmark verschiedener Anwendungsfälle hat pnpm Leistungsgeschwindigkeiten von bis zu 3x schneller als npm gezeigt.

Die Geschwindigkeiten von Garn und npm sind vergleichbar. In einigen Fällen hat Yarn einen signifikanten Vorteil gegenüber npm, aber es gibt Szenarien, in denen npm eine geeignetere Wahl ist. Wenn wir beispielsweise einen Installationsvorgang ausführen, indem wir einfach die node_modules und die cache und lock file -Funktionalität überspringen, könnte npm eine 5x bessere Geschwindigkeit bieten. Wenn wir alle drei Funktionen verwenden, könnte Yarn seine Leistung steigern und wird 11x schneller als npm.

Sicherheit

Der Hauptvorteil von Yarn gegenüber npm besteht darin, dass die Integrität jedes Pakets mithilfe von Prüfsummen überprüft wird. Der Überprüfungsprozess wird durchgeführt, bevor Code aus dem Paket ausgeführt wird, sodass die Wahrscheinlichkeit einer Paket-Hijacking-Sicherheitsanfälligkeit ausgeschlossen ist.

Andererseits ist npm etwas fehlerverzeihender, wenn es darum geht, mit schlechten Paketen zu arbeiten. Es wird noch weiterentwickelt, um die besten Praktiken für die Sicherheit zu bieten. Aber npm hat im Allgemeinen einen schlechten Ruf in Bezug auf Sicherheit.

In der Vergangenheit gab es einige Sicherheitslücken in npm, die viele Projekte direkt betrafen. Wenn Sie beispielsweise in npm Version 5.7.0 den Befehl sudo npm auf einem Linux-basierten Betriebssystem (OS) ausführen, bestand die Möglichkeit, den Besitz von Systemdateien zu ändern, wodurch das Betriebssystem unbrauchbar wurde.

In ähnlicher Weise ereignete sich 2018 ein weiterer Vorfall des Diebstahls von Bitcoins. Grundsätzlich der beliebte Knoten.das js-Paket EventStream hat in seiner Version 3.3.6 eine bösartige Abhängigkeit flatmap-stream hinzugefügt. Dieses bösartige Paket wurde mit einer verschlüsselten Nutzlast gepackt, die versucht, Bitcoins von der Maschine des Entwicklers zu stehlen.

pnpm kombiniert die positiven Eigenschaften von npm und Yarn, um noch mehr Sicherheit zu bieten. Es implementiert auch einen strengen Zugriffskontrollmechanismus, der ein Paket so bindet, dass es nur seine eigenen Abhängigkeiten verwendet, die in seiner -Datei definiert sind.

Stabilität

npm, Garn und pnpm haben in den letzten Jahren mehrere Phasen durchlaufen. Im Laufe der Zeit ist ihre Codebasis gereift, weil sie Tonnen von Beiträgen von der Open-Source-Community erhalten haben.

Und im Laufe der Zeit tauchen neue Konzepte und Ideen auf, die bahnbrechende Veränderungen bewirken könnten. Zum Zeitpunkt des Schreibens dieses Handbuchs sind alle diese Paketmanager in gutem Zustand und Sie können sie problemlos in Ihren Projekten verwenden.Yarn wird von Facebook und Google unterstützt, npm von Microsoft und Node.js und pnpm werden hauptsächlich von einer Einzelperson entwickelt, obwohl es jetzt mehr als 75 Mitwirkende hat — Sie können sich also auf diese Paketmanager verlassen, um Ihr nächstes Projekt zu erstellen.

Unterstützung für Monorepos

Monorepos werden hauptsächlich von großen Technologieunternehmen bevorzugt, um ihre massiven Codebasen zu speichern und zu verwalten. npm wurde nur entwickelt, um einzelne Projekte zu verwalten. Ab sofort hat es keine Funktionalität, um Monorepos zu unterstützen. Aber sowohl Yarn als auch pnpm unterstützen Monorepos dank ihres Konzepts von Arbeitsbereichen vollständig.

Deterministisch – die Sperrdatei

Alle drei Paketmanager sind mit der Funktionalität der Sperrdatei gepackt. Es ermöglicht verschiedenen Entwicklern, genau dieselbe Kopie des Projekts zu installieren. npm verwendet eine package-lock.json -Datei, Yarn verwendet yarn.lock und pnpm verwendet pnpm-lock.yaml .

Fazit

Wenn Sie nach einer Lösung suchen, die Ihnen eine bessere Geschwindigkeit und eine effizientere Speichernutzung bietet, sollten Sie die Verwendung von pnpm in Betracht ziehen.

Wenn Sie monorepos verarbeiten, können Sie dazu pnpm oder Yarn verwenden. Beachten Sie jedoch, dass Yarn Nutzungsdaten an Facebook sendet, was Yarn in einigen Szenarien möglicherweise nicht zu einer geeigneten Wahl macht.

Yarn unterstützt auch Version 5 von Node nicht.js. In dieser Hinsicht ist npm eine bevorzugte Option für Node.js-basierte Projekte, weil es vom Knoten empfohlen wird.js-Team. In diesen Tagen, Knoten.js wird standardmäßig mit npm geliefert.

Bei npm sollten Sie die Historie mit Sicherheitsproblemen berücksichtigen, die die Entwicklung von Yarn ausgelöst haben, das auch zur Lösung vieler in npm vorhandener Emittenten erstellt wurde. Wenn Sie sich also mit der Sicherheit Ihrer Projekte befassen, sollten Sie Yarn anstelle von npm verwenden.

LogRocket: Debuggen Sie JavaScript-Fehler einfacher, indem Sie den Kontext verstehen

Das Debuggen von Code ist immer eine mühsame Aufgabe. Aber je mehr Sie Ihre Fehler verstehen, desto einfacher ist es, sie zu beheben.

Mit LogRocket können Sie diese Fehler auf neue und einzigartige Weise verstehen. Unsere Frontend-Monitoring-Lösung verfolgt die Benutzerinteraktion mit Ihren JavaScript-Frontends, um Ihnen die Möglichkeit zu geben, genau herauszufinden, was der Benutzer getan hat, der zu einem Fehler geführt hat.

LogRocket Dashboard Free Trial Banner

LogRocket zeichnet Konsolenprotokolle, Seitenladezeiten, Stacktraces, langsame Netzwerkanforderungen / -antworten mit Headern + Körpern, Browser-Metadaten und benutzerdefinierten Protokollen auf. Es wird nie einfacher sein, die Auswirkungen Ihres JavaScript-Codes zu verstehen!

Probieren Sie es kostenlos aus.

Related Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.