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_modulesganz abschafft und Pakete in einer einzigen Datei vorhält
yarn install # = npm installyarn add react # = npm install reactyarn add -D vite # = npm install --save-dev vitepnpm 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.
pnpm install # = npm installpnpm add react # = npm install reactpnpm add -D vite # = npm install --save-dev viteSupply-Chain-Angriffe abwehren
Abschnitt betitelt „Supply-Chain-Angriffe abwehren“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.
minimumReleaseAge: 1440Der 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:
minimumReleaseAge: 1440minimumReleaseAgeExclude: - '@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.
bun install # = npm installbun add react # = npm install reactbun add -d vite # = npm install --save-dev viteBun ist noch jung — für Produktionsprojekte lohnt es sich, die Reife des Ökosystems im Blick zu behalten.
Vergleich
Abschnitt betitelt „Vergleich“| npm | yarn | pnpm | bun | |
|---|---|---|---|---|
| Lockfile | package-lock.json | yarn.lock | pnpm-lock.yaml | bun.lockb |
| Speichereffizienz | — | — | ++ | + |
| Strikte Abhängigkeiten | — | — | ✓ | — |
| Geschwindigkeit | ○ | ○ | ++ | +++ |
| Supply-Chain-Schutz | — | — | ✓ (Standard ab v11) | — |
| Verbreitung | sehr hoch | hoch | mittel | gering |
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.