encyklopedia.space

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_modules poszczegó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 workspace umoż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 z package.json i pnpm-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 w package.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.

Zobacz także