# pnpm — Schneller, platzsparender Paketmanager für Node.js

> Praxis-Guide zu pnpm — schneller, platzsparender Paketmanager für Node.js mit content-addressable Store und exzellentem Monorepo-Support.

Source: https://www.jpkc.com/db/cheatsheets/package-managers/pnpm/

<!-- PROSE:intro -->
pnpm ist ein schneller, besonders platzsparender Paketmanager für Node.js – ein direkter Ersatz für npm, der dieselben `package.json`-Dateien versteht. Statt jede Abhängigkeit pro Projekt neu zu kopieren, legt pnpm sie einmal in einem content-addressable Store ab und verlinkt sie per Hardlink in deine Projekte – das spart enorm Plattenplatz und Installationszeit. Das strikte `node_modules`-Layout sorgt dafür, dass du nur auf Pakete zugreifst, die du auch wirklich deklariert hast, und bei Monorepos spielt pnpm mit seiner Workspace-Unterstützung seine größte Stärke aus. Dieser Guide zeigt dir die wichtigsten Befehle für den Alltag – vom Installieren über das Verwalten von Workspaces bis zur Pflege des Stores.
<!-- PROSE:intro:end -->

## Installieren & Initialisieren

`pnpm init` — Erstellt eine neue package.json.

```bash
pnpm init
```

`pnpm install` — Installiert alle Abhängigkeiten aus der package.json.

```bash
pnpm install
```

`pnpm i` — Kurzform für install.

```bash
pnpm i
```

`pnpm install --frozen-lockfile` — Installiert, ohne die Lockfile zu aktualisieren (CI-sicher).

```bash
pnpm install --frozen-lockfile
```

`pnpm install --prod` — Installiert nur Produktiv-Abhängigkeiten.

```bash
pnpm install --prod
```

## Hinzufügen & Entfernen

`pnpm add <package>` — Fügt ein Paket als Abhängigkeit hinzu.

```bash
pnpm add express
```

`pnpm add -D <package>` — Fügt es als Entwicklungs-Abhängigkeit hinzu.

```bash
pnpm add -D typescript
```

`pnpm add -g <package>` — Installiert ein Paket global.

```bash
pnpm add -g serve
```

`pnpm add <package>@<version>` — Fügt eine bestimmte Version hinzu.

```bash
pnpm add react@18.2.0
```

`pnpm remove <package>` — Entfernt ein Paket.

```bash
pnpm remove lodash
```

`pnpm rm <package>` — Kurzform für remove.

```bash
pnpm rm lodash
```

## Aktualisieren & Informationen

`pnpm update` — Aktualisiert alle Pakete innerhalb ihrer Versionsbereiche.

```bash
pnpm update
```

`pnpm update --latest` — Aktualisiert alle Pakete auf die neuesten Versionen (ignoriert Versionsbereiche).

```bash
pnpm update --latest
```

`pnpm outdated` — Zeigt veraltete Pakete an.

```bash
pnpm outdated
```

`pnpm list` — Listet installierte Pakete auf.

```bash
pnpm list --depth=0
```

`pnpm why <package>` — Zeigt, warum ein Paket installiert ist.

```bash
pnpm why webpack
```

## Skripte & Ausführen

`pnpm run <script>` — Führt ein Skript aus der package.json aus.

```bash
pnpm run build
```

`pnpm <script>` — Kurzform für gängige Skripte (start, test usw.).

```bash
pnpm test
```

`pnpm dlx <package>` — Führt ein Paket aus, ohne es zu installieren (wie npx).

```bash
pnpm dlx create-next-app my-app
```

`pnpm exec <command>` — Führt einen Befehl aus node_modules/.bin aus.

```bash
pnpm exec tsc --version
```

## Workspaces & Filter

`pnpm -r <command>` — Führt einen Befehl rekursiv in allen Workspace-Paketen aus.

```bash
pnpm -r build
```

`pnpm --filter <name> <command>` — Führt einen Befehl in einem bestimmten Workspace-Paket aus.

```bash
pnpm --filter @myapp/api build
```

`pnpm --filter '<pattern>' <command>` — Führt ihn in Paketen aus, die auf ein Glob-Muster passen.

```bash
pnpm --filter './packages/*' test
```

`pnpm --filter '...<name>' <command>` — Führt ihn in einem Paket und all seinen Abhängigkeiten aus.

```bash
pnpm --filter '...@myapp/web' build
```

`pnpm -r --parallel <command>` — Führt ihn parallel in allen Paketen aus.

```bash
pnpm -r --parallel lint
```

## Store & Konfiguration

`pnpm store status` — Prüft den Store auf veränderte Pakete.

```bash
pnpm store status
```

`pnpm store prune` — Entfernt nicht referenzierte Pakete aus dem Store.

```bash
pnpm store prune
```

`pnpm store path` — Zeigt den Speicherort des content-addressable Stores an.

```bash
pnpm store path
```

`pnpm config list` — Zeigt alle Konfigurationseinstellungen an.

```bash
pnpm config list
```

`pnpm config set <key> <value>` — Setzt einen Konfigurationswert.

```bash
pnpm config set store-dir /custom/store
```

<!-- PROSE:outro -->
## Fazit

pnpm ist die richtige Wahl, wenn dir Plattenplatz, Installationsgeschwindigkeit und ein sauberes Abhängigkeits-Layout wichtig sind – besonders in Monorepos mit vielen Paketen. Setze in CI-Pipelines konsequent auf `pnpm install --frozen-lockfile`: So wird exakt die committete `pnpm-lock.yaml` installiert und ein versehentliches Aktualisieren verhindert, was reproduzierbare Builds garantiert. Behalte zudem die Install-Skripte deiner Abhängigkeiten im Blick – sie sind ein klassischer Supply-Chain-Vektor – und pinne Versionen, statt sie offen mitlaufen zu lassen. Mit `pnpm store prune` hältst du den geteilten Store schlank, ohne aktiv genutzte Pakete zu verlieren.

## Weiterführende Links

- [pnpm.io](https://pnpm.io/) – offizielle Dokumentation, Konfiguration und Workspace-Guide (englisch)
- [pnpm – GitHub-Projekt](https://github.com/pnpm/pnpm) – Quellcode, Releases und Issue-Tracker (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [npm](https://www.jpkc.com/db/cheatsheets/package-managers/npm/) – der Standard-Paketmanager von Node.js
- [yarn](https://www.jpkc.com/db/cheatsheets/package-managers/yarn/) – alternativer JavaScript-Paketmanager mit Workspaces
- [nvm](https://www.jpkc.com/db/cheatsheets/package-managers/nvm/) – verwaltet mehrere Node.js-Versionen parallel

