# npm vs pnpm

Adres: https://softwaredictionary.org/tr/karsilastirma/npm-vs-pnpm
Son güncelleme: 2026-10-06

Kısaca: npm her paketi her projenin düz `node_modules` klasörüne kopyalar; pnpm tek kopyayı ortak bir depoda tutup bağlar ve tanımlanmamış import'ları engeller.

## npm ile pnpm arasındaki fark nedir?

npm ve pnpm, aynı `package.json` dosyasını okuyan ve paketleri aynı npm deposundan kuran iki JavaScript paket yöneticisidir. npm varsayılan olandır ve her Node.js kurulumuyla birlikte gelir. Adı "performant npm" ifadesinin kısaltması olan pnpm ise disk alanından tasarruf etmek, kurulumları hızlandırmak ve bağımlılıkları sıkı tutmak için geliştirilmiş ayrı bir araçtır; npm'e yayımlanan her şey onunla da kurulur.

Fark, dosyaların nereye gittiğindedir. npm her bağımlılığı her projenin `node_modules` klasörüne kopyalar ve hepsini tek, düz bir klasörde en üste taşır (hoisting); bu yüzden React kullanan on proje React'in on kopyasını tutar ve 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 ise her dosyayı içerik adresli ortak bir depoya (store) bir kez kaydeder ve projelere hard link olarak ekler; `node_modules` klasöründe de yalnızca doğrudan bağımlılıklarınız, `node_modules/.pnpm` klasörüne işaret eden sembolik bağlar olarak durur. Böylece tanımlanmamış import'lar hemen hata verir.

Komutlar birbirine yakındır: `npm install react` yerine `pnpm add react`, `npx` yerine `pnpm dlx`; `pnpm import` da var olan bir `package-lock.json` dosyasını `pnpm-lock.yaml` dosyasına dönüştürür. pnpm, bir `pnpm-workspace.yaml` dosyası ve komutları yalnızca bazı paketlerde çalıştıran `--filter` bayrağıyla monorepo'larda popülerdir. Güvenlik konusunda da daha sıkıdır: sürüm 10'dan beri siz onaylamadıkça bağımlılıkların kurulum script'lerini çalıştırmaz; npm ise `--ignore-scripts` vermediğiniz sürece onları varsayılan olarak çalıştırır.

Sık yapılan bir yanlış, pnpm'in npm'in bir fork'u ya da ayrı bir paket deposu olduğu düşüncesidir; ikisi de değildir, yalnızca paketleri diske farklı biçimde yerleştirir. Katılığı bazen hoisting'e güvenen eski paketleri bozar; bu, pnpm'deki değil o paketlerdeki gizli bir hatadır ve pnpm'in bu durumlar için yerleşimi gevşeten hoisting ayarları vardır. Her paket yöneticisinde olduğu gibi, bir proje tek bir araç kullanmalı ve yalnızca onun lockfile'ını commit etmelidir.

| Özellik | npm | pnpm |
| --- | --- | --- |
| Disk kullanımı | Her projede her paketin tam bir kopyası | Ortak depoda sürüm başına tek kopya; projelere hard link ile bağlanır |
| Klasör yerleşimi | Düz: bağımlılıklar en üst düzeye taşınır | Sıkı: en üstte yalnızca doğrudan bağımlılıklar, `.pnpm` içine bağlanır |
| Tanımlanmamış import'lar | Çoğu zaman tesadüfen çalışır (hayalet bağımlılıklar) | Hemen hata verir |
| Lockfile | `package-lock.json` | `pnpm-lock.yaml` |
| Tekrarlanan kurulumlar | Her paketi önbelleğinden yeniden açıp kopyalar | Depoda zaten bulunan dosyaları bağlar; genellikle daha hızlı |
| Kurulum script'leri | Bağımlılıkların script'leri varsayılan olarak çalışır | Sürüm 10'dan beri siz onaylayana kadar engellenir |
| Monorepo'lar | `--workspace` bayraklarıyla workspace'ler | `--filter` ile birlikte `pnpm-workspace.yaml` |
| Hazırlık | Node.js ile birlikte gelir | Ayrıca kurulur; çoğu zaman Corepack ya da `npm install -g pnpm` ile |

## npm şu durumlarda doğru seçim

- Node.js ile gelen, başka hiçbir şey kurmayı gerektirmeyen varsayılan aracı istiyorsunuz.
- Barındırma ortamınız, CI imajlarınız ya da eğitimler npm'i ve `package-lock.json` dosyasını varsayıyor.
- Projedeki eski araçlar düz bir `node_modules` klasörü bekliyor.

## pnpm şu durumlarda doğru seçim

- Pek çok projede ya da CI'da disk alanı veya kurulum süresi önemli.
- Tanımlanmamış import'ların tesadüfen çalışmak yerine hata vermesini istiyorsunuz.
- Bir monorepo yönetiyorsunuz ve `--filter` ile workspace bağlantılarını istiyorsunuz.
- Bağımlılıkların kurulum script'lerinin siz onaylayana kadar engellenmesini istiyorsunuz.

## Sık sorulan sorular

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

Tekrarlanan kurulumlarda genellikle evet: depoda zaten bulunan dosyalar yeniden açılıp kopyalanmak yerine bağlanır. Fark projeye ve deponun önceden dolu olup olmadığına bağlıdır; temiz bir makinedeki ilk kurulumlarda ikisi birbirine daha yakındır.

**pnpm her npm paketiyle çalışır mı?**

Aynı depodan kurduğu için neredeyse hepsiyle çalışır. Birkaç eski paket, hiç tanımlamadığı bağımlılıkları import eder ve pnpm'in sıkı yerleşiminde bozulur; pnpm'in hoisting ayarları bu paketler için yerleşimi gevşetir.

**Bir projeyi npm'den pnpm'e nasıl geçiririm?**

`package-lock.json` dosyasından `pnpm-lock.yaml` oluşturmak için `pnpm import` çalıştırın, eski lockfile'ı ve `node_modules` klasörünü silin, ardından `pnpm install` çalıştırın. Herkesin aynı aracı kullanması için pnpm'i `packageManager` alanına yazın.

---

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