# npm vs Yarn

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

Kısaca: npm, Node.js ile gelir ve paketleri `node_modules` içine kurar; Yarn ise aynı depoyu kullanan, kendi lockfile'ı ve Plug'n'Play kurulumu olan ayrı bir istemcidir.

## npm ile Yarn arasındaki fark nedir?

npm ve Yarn, JavaScript için iki paket yöneticisidir: bir projenin `package.json` dosyasını okur, bağımlılıklarını aynı npm deposundan indirir ve tam sürümlerini sabitlerler. npm varsayılan olandır; 2010'da geliştirildi ve her Node.js kurulumuyla birlikte gelir. Yarn ise 2016'da Facebook tarafından daha hızlı ve daha öngörülebilir bir alternatif olarak yayımlandı; yani ayrı bir ekosistem değil, aynı paketler için farklı bir istemcidir.

Yarn'ın ilk dönemdeki üstünlüğü, npm'in sonradan benimsediği fikirlerden geliyordu: her sürümü sabitleyen bir lockfile (`yarn.lock`), çevrimdışı bir önbellek ve tek depoda birden çok paketi yönetmek için workspace'ler. npm, 2017'de `package-lock.json` dosyasını, 2020'de de workspace'leri ekledi; bu yüzden npm ve Yarn Classic (sürüm 1) bugün birbirine çok benzer çalışır. Bugünkü asıl fark, sürüm 2 ve sonrası olan modern Yarn'dadır: varsayılan Plug'n'Play modu `node_modules` klasörünü atlar ve her paketin Yarn'ın önbelleğinde nerede durduğunu Node.js'e söyleyen tek bir `.pnp.cjs` dosyası yazar; bu da kurulumları hafifletir ve tanımlanmamış import'ların hata vermesini sağlar.

Günlük kullanımda komutlar birbirine yakındır: `npm install react` yerine `yarn add react`, `npm run build` yerine de `yarn build`; Yarn `run` sözcüğüne ihtiyaç duymaz. npm hiçbir hazırlık gerektirmez; modern Yarn ise her projede `package.json` içindeki `packageManager` alanıyla sabitlenir ve genellikle Corepack ile kurulur. Corepack, sürüm 25'e kadar Node.js ile birlikte geliyordu ve artık `npm install -g corepack` ile ayrıca kuruluyor. Gerçek bir `node_modules` klasörü bekleyen araçlar, `.yarnrc.yml` içindeki `nodeLinker: node-modules` ayarıyla Yarn altında da çalışmaya devam eder.

Sık yapılan bir hata, ikisini aynı projede karıştırmaktır. Her biri kendi lockfile'ını yazdığı için kurulumlar zamanla birbirinden ayrışır; birini seçin, diğerinin lockfile'ını silin ve tercihinizi `packageManager` alanına yazın. Bir başka yanlış da Yarn'ın her zaman çok daha hızlı olduğu düşüncesidir: npm ilk dönemdeki farkın büyük kısmını kapattı; bu yüzden bugün seçim çoğunlukla çalışma alışkanlığına, paketlerin diske yerleşimine ve ekibin tercih ettiği monorepo araçlarına bağlıdır.

| Özellik | npm | Yarn |
| --- | --- | --- |
| Kökeni | 2010'da geliştirildi; Node.js ile birlikte gelir | 2016'da Facebook tarafından yayımlandı; ayrıca kurulur |
| Lockfile | `package-lock.json` | `yarn.lock` |
| Paket yerleşimi | Paketlerin en üst düzeye taşındığı (hoisting) bir `node_modules` klasörü | Modern Yarn'da varsayılan olarak Plug'n'Play; `node_modules` isteğe bağlı |
| Script çalıştırma | `npm run build`; yalnızca `npm test` gibi birkaçı `run` olmadan çalışır | `yarn build`; `run` sözcüğü isteğe bağlı |
| Tek seferlik komutlar | `npx create-vite` | `yarn dlx create-vite` |
| Monorepo'lar | 2020'den beri workspace'ler, `--workspace` bayraklarıyla | 2017'den beri workspace'ler; modern Yarn `yarn workspaces foreach` ekler |
| Hazırlık | Ek bir şey kurmak gerekmez | `packageManager` alanında sabitlenir, Corepack ile kurulur |
| En uygun olduğu durum | Ek araç gerektirmeyen varsayılan yol | Plug'n'Play, zero-install ya da Yarn'ın monorepo araçlarını isteyen ekipler |

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

- Node.js ile birlikte gelen ve hiçbir hazırlık gerektirmeyen varsayılanı istiyorsunuz.
- Barındırma ortamınız, CI imajlarınız ya da izlediğiniz eğitimler `npm install` ve `package-lock.json` varsayıyor.
- Araçlarınız normal bir `node_modules` klasörü bekliyor.

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

- Plug'n'Play'in sıkı bağımlılık denetimlerini ve daha hafif kurulumlarını istiyorsunuz.
- Bir monorepo yönetiyorsunuz ve `yarn workspaces foreach` gibi komutlar istiyorsunuz.
- Zero-install istiyorsunuz: Yarn'ın önbelleğini commit ederek yeni bir klonun kurulum yapmadan çalışmasını sağlamak.
- Proje zaten Yarn'ı ve onun `yarn.lock` dosyasını kullanıyor.

## Sık sorulan sorular

**Yarn, npm'den daha mı hızlı?**

2016'da ortaya çıktığında açıkça daha hızlıydı; npm o zamandan beri bu farkın büyük kısmını kapattı. Plug'n'Play kullanan modern Yarn, çok daha az dosya yazdığı için büyük projeleri hâlâ daha hızlı kurabilir; ama sonuç projeye ve önbelleğe bağlıdır.

**Yarn Classic mi, modern Yarn mı kullanmalıyım?**

Yeni projeler için modern Yarn: Yarn Classic (sürüm 1) yalnızca ara sıra düzeltme alıyor. Plug'n'Play bir araçla sorun çıkarırsa `nodeLinker: node-modules` ayarını yapın ve modern Yarn'ın geri kalanını kullanmaya devam edin.

**Bir projeyi npm'den Yarn'a nasıl geçiririm?**

Yarn'ı Corepack ile kurun, `package-lock.json` dosyasını ve `node_modules` klasörünü silin, ardından bağımlılıkları `package.json` dosyasından çözüp `yarn.lock` dosyasını yazması için `yarn` komutunu çalıştırın. Yeni lockfile'ı commit edin ve testleri çalıştırın, çünkü bazı sürümler değişebilir.

---

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