Zum Inhalt springen

Alternativen zu npm

npm ist der Standard, aber nicht die einzige Wahl. Drei Alternativen haben sich etabliert, jeweils mit eigenem Fokus.

Yarn wurde 2016 von Facebook entwickelt, als npm noch deutlich langsamer war und keinen Lockfile hatte. Heute sind die Unterschiede geringer geworden, aber Yarn hat zwei Varianten:

  • Yarn Classic (v1) — weitgehend wie npm, kaum noch weiterentwickelt
  • Yarn Berry (v2+) — mit optionalem „Plug’n’Play”-Modus, der node_modules ganz abschafft und Pakete in einer einzigen Datei vorhält
Terminal-Fenster
yarn install # = npm install
yarn add react # = npm install react
yarn add -D vite # = npm install --save-dev vite

pnpm löst ein fundamentales Problem von npm und yarn: In einem System mit mehreren Projekten wird jedes Paket in jeder Version einmal gespeichert (in einem globalen Store) und per Hardlink in die jeweiligen node_modules/ eingebunden. Das spart erheblich Speicherplatz.

Zusätzlich erzeugt pnpm eine striktere node_modules/-Struktur: Pakete können nur auf Abhängigkeiten zugreifen, die sie explizit deklariert haben — was versehentliche Abhängigkeiten auf nicht deklarierte Pakete verhindert.

Terminal-Fenster
pnpm install # = npm install
pnpm add react # = npm install react
pnpm add -D vite # = npm install --save-dev vite

Ein verbreiteter Angriffsvektor sind kompromittierte npm-Pakete: Ein Angreifer übernimmt ein Paket (z. B. durch Phishing des Maintainers) und veröffentlicht eine neue Version mit Schadcode. Wer in den ersten Stunden npm install ausführt, zieht sich die manipulierte Version.

pnpm begegnet dem mit minimumReleaseAge in der pnpm-workspace.yaml: Pakete, die jünger als der konfigurierte Wert sind, werden schlicht nicht installiert.

pnpm-workspace.yaml
minimumReleaseAge: 1440

Der Wert ist in Minuten — 1440 entspricht 24 Stunden. In dieser Zeit haben Sicherheitsforscher und die Community meist genug Zeit, einen Angriff zu entdecken und zu melden, bevor er in produktiven Projekten landet.

Ab pnpm v11 ist dieser Wert der Standard — ohne zusätzliche Konfiguration greift die Ein-Tages-Verzögerung automatisch.

Für Sicherheitsupdates, die sofort eingespielt werden sollen, lassen sich Pakete explizit ausnehmen:

pnpm-workspace.yaml
minimumReleaseAge: 1440
minimumReleaseAgeExclude:
- '@myorg/*'

Bun ist eine JavaScript-Runtime (Alternative zu Node.js) mit eingebautem Paketmanager. Es ist auf Geschwindigkeit ausgelegt und ersetzt npm, einen Bundler und einen Test-Runner in einem einzigen Tool.

Terminal-Fenster
bun install # = npm install
bun add react # = npm install react
bun add -d vite # = npm install --save-dev vite

Bun ist noch jung — für Produktionsprojekte lohnt es sich, die Reife des Ökosystems im Blick zu behalten.

npmyarnpnpmbun
Lockfilepackage-lock.jsonyarn.lockpnpm-lock.yamlbun.lockb
Speichereffizienz+++
Strikte Abhängigkeiten
Geschwindigkeit+++++
Supply-Chain-Schutz✓ (Standard ab v11)
Verbreitungsehr hochhochmittelgering

Für den Einstieg ist der Unterschied zwischen npm und pnpm gering — die Befehle sind fast identisch. pnpm lohnt sich vor allem, wenn viele Projekte auf derselben Maschine laufen.