pnpm
pnpm (skrót od Performant npm) – szybki i oszczędny menedżer pakietów dla ekosystemu Node.js, będący alternatywą dla npm i Yarn. Projekt jest udostępniany jako oprogramowanie open source od 2016 roku.
Historia
Pierwsza wersja pnpm została opublikowana w 2016 roku przez Zoltana Kocsisa. Kusiły go dwa główne problemy tradycyjnych menedżerów pakietów: duże zużycie miejsca na dysku oraz wolne instalacje w dużych aplikacjach.
Główne założenia i cechy
- Współdzielenie plików – pnpm przechowuje jedną fizyczną kopię każdego pakietu w globalnym magazynie i tworzy hard linki do niego w katalogach
node_modulesposzczególnych projektów. - Szybkość – dzięki współdzieleniu i równoległemu pobieraniu instalacje są zazwyczaj szybsze niż w npm i Yarn.
- Deterministyczne drzewo zależności – pnpm używa pliku
pnpm-lock.yaml, który zapewnia identyczne środowiska na różnych maszynach. - Wsparcie monorepo – tryb
workspaceumożliwia zarządzanie wieloma pakietami w jednym repozytorium. - Bezpieczeństwo – wbudowane skanowanie zależności przy użyciu npm audit oraz możliwość integracji z narzędziami takimi jak Snyk.
Instalacja i podstawowe polecenia
Aby zainstalować pnpm, wystarczy mieć zainstalowane Node.js (wersja 12 lub nowsza) i wykonać:
npm i -g pnpm
Podstawowe komendy:
pnpm install– instalacja zależności zgodnie zpackage.jsonipnpm-lock.yaml.pnpm add <pakiet>– dodanie nowego pakietu do projektu.pnpm remove <pakiet>– usunięcie pakietu.pnpm update– aktualizacja istniejących zależności.pnpm run <skrypt>– uruchomienie skryptu zdefiniowanego wpackage.json.
Porównanie z innymi menedżerami pakietów
| Cecha | pnpm | npm | Yarn |
|---|---|---|---|
| Wykorzystanie dysku | 🔹 (dzielenie hard linków) | 🔸 | 🔸 |
| Szybkość instalacji | 🔹 (bardzo szybka) | 🔸 | 🔹 |
| Deterministyczny lockfile | ✅ pnpm-lock.yaml |
✅ package-lock.json |
✅ yarn.lock |
| Wsparcie monorepo | ✅ workspace |
✅ (od npm 7 workspaces) |
✅ |
| Kompatybilność z rejestrem npm | ✅ | ✅ | ✅ |
Ekosystem i społeczność
Pnpm jest rozwijany na platformie GitHub i utrzymywany przez społeczność open source. W repozytorium można zgłaszać błędy, proponować nowe funkcje oraz brać udział w dyskusjach. Projekt regularnie pojawia się na konferencjach JSConf i Node.js Conference.
Przykładowe użycie w monorepo
// pnpm-workspace.yaml
packages:
- "packages/*"
- "tools/*"
Plik pnpm-workspace.yaml definiuje katalogi wchodzące w skład jednego monorepo. Dzięki temu wszystkie zależności są współdzielone i instalowane w jednym wspólnym katalogu node_modules na poziomie root.