# pnpm (Performant npm)

Adres: https://softwaredictionary.org/tr/terimler/pnpm
Kategori: Web Geliştirme
Son güncelleme: 2026-10-06
Okunuşu: pi en pi em

Kısaca: pnpm, her paket sürümünün tek kopyasını ortak bir depoda tutup projelere bağlayan, hızlı ve disk dostu bir JavaScript paket yöneticisidir.

## pnpm nedir?

Adı "performant npm" ifadesinin kısaltması olan pnpm, JavaScript paketlerini npm ile aynı depodan kurar ve aynı `package.json` dosyasını okur. Değiştirdiği şey dosyaların nereye gittiğidir. npm her bağımlılığı her projenin `node_modules` klasörüne kopyalar; React kullanan on proje, React'in on kopyasını tutar. pnpm ise her dosyayı bir kez, içerik adresli bir depoya, yani dosyaların içeriklerinin hash'iyle saklandığı bir klasöre kaydeder ve ona ihtiyaç duyan her projeye hard link olarak, yani diskteki aynı dosyanın ikinci bir adı olarak ekler. Böylece fazladan kopyalar neredeyse hiç yer kaplamaz ve tekrarlanan kurulumlar hızlı olur.

`node_modules` klasörü de farklı kurulur. npm ve Yarn Classic bütün paketleri `node_modules` klasörünün en üst düzeyine taşır (hoisting); bu yüzden kodunuz, hiç tanımlamadığınız bir paketi sırf bir bağımlılık onu getirdiği için import edebilir. Buna hayalet bağımlılık (phantom dependency) denir. pnpm en üste yalnızca doğrudan bağımlılıklarınızı, gizli bir `node_modules/.pnpm` klasörüne işaret eden sembolik bağlar olarak koyar; böylece tanımlanmamış bir paketi import etmek daha sonra sorun çıkarmak yerine hemen hata verir.

pnpm lockfile'ını `pnpm-lock.yaml` dosyasına yazar ve monorepo'lar için güçlü yerleşik destek sunar: `pnpm-workspace.yaml` dosyası paketleri listeler, `--filter` ise bir komutu yalnızca bazı paketlerde çalıştırır. Sürüm 10'dan beri pnpm, siz izin vermedikçe bağımlılıkların kurulum script'lerini çalıştırmaz; bu da tedarik zinciri saldırılarının sık kullandığı bir yolu kapatır.

pnpm bazen npm'in bir fork'u ya da ayrı bir paket deposu sanılır, ama ikisi de değildir: npm'e yayımlanan her şey pnpm ile kurulur ve komutlar birbirine çok yakındır (`pnpm add`, `pnpm install`, `pnpm run`). Fark, paketlerin diske yerleşimindedir. Bu katılık, hoisting'e güvenen eski paketlerdeki gizli hataları ortaya çıkarabilir; bu durumlar için pnpm'in yerleşimi gevşeten ayarları vardır.

## Önemli noktalar

- pnpm paketleri npm deposundan kurar, ama her paket sürümünü bir kez saklar ve projelere bağlar.
- Disk alanından tasarruf sağlar ve tekrarlanan kurulumları hızlandırır.
- Yalnızca tanımlanmış bağımlılıklara erişilebilir; bu da hayalet bağımlılıkları önler.
- Workspace'ler ve `--filter` onu monorepo'larda popüler yapar.
- Sürüm 10'dan beri bağımlılıkların kurulum script'leri yalnızca siz izin verirseniz çalışır.

## Örnek: Günlük pnpm komutları

```bash
pnpm install              # install from pnpm-lock.yaml (npm install)
pnpm add react            # add a dependency (npm install react)
pnpm add -D typescript    # add a dev dependency
pnpm dlx create-vite      # run a package once (npx create-vite)
pnpm --filter web build   # in a monorepo, run "build" only in the "web" package
pnpm approve-builds       # choose which dependencies may run install scripts
pnpm store path           # show where the shared store is on disk
```

## Sık sorulan sorular

**pnpm, npm'den hızlı mı?**

Tekrarlanan kurulumlarda genellikle evet: depoda zaten bulunan dosyalar yeniden indirilip kopyalanmak yerine bağlanır. Ne kadar hızlı olduğu projeye ve deponun önceden dolu olup olmadığına bağlıdır.

**Hayalet bağımlılık (phantom dependency) nedir?**

Kodunuzun `package.json` içinde listelemeden import ettiği bir pakettir. Yalnızca başka bir bağımlılık onu kurduğu ve paket yöneticisi onu `node_modules` klasörünün en üstüne taşıdığı için çalışır; o bağımlılık değişince bozulur. pnpm'in yerleşimi bu tür import'ların hemen hata vermesini sağlar.

**Var olan bir npm projesini pnpm'e geçirebilir miyim?**

Evet. `pnpm import`, var olan bir `package-lock.json` ya da `yarn.lock` dosyasından `pnpm-lock.yaml` oluşturur; gerisini `pnpm install` halleder. Düz bir `node_modules` bekleyen birkaç eski araç, pnpm'in hoisting ayarlarına ihtiyaç duyabilir.

## Kaynaklar

- [pnpm documentation: Motivation](https://pnpm.io/motivation)
- [pnpm documentation: Symlinked node_modules structure](https://pnpm.io/symlinked-node-modules-structure)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
