yarn: öz, React Native için alternatif paket yöneticisi

Yazar: IT Sectr Yayınlanma: 2026-02-13 Okuma süresi: 10 dk

yarn — Node.js için alternatif bir paket yöneticisi, Facebook tarafından Exponent, Google ve Tilde ile birlikte 2016 yılında oluşturuldu. yarn, npm 2-4'ün hız ve güvenlik sorunlarını çözdü: paralel kurulum, katı lock dosyası ve çevrimdışı önbellek. Bugün yarn, React Native, Expo ve monorepolarda popülerliğini koruyor. Daha fazla bilgi için yarn Documentation adresini ziyaret edin.

Önemli Noktalar

  • yarn — npm sorunlarını çözmek için Facebook tarafından 2016 yılında oluşturulan Node.js paket yöneticisi
  • yarn.lock — tüm bağımlılıkların tam sürümlerini kaydeden, otomatik oluşturulan lock dosyası
  • yarn install — tekrarsız küresel önbellek kullanarak paralel paket kurulumu
  • yarn workspaces — paylaşılan node_modules klasörüyle monorepoları yönetme mekanizması
  • Plug'n'Play — paketleri küresel önbellekte ZIP arşivlerinde depolayan node_modules alternatifi

yarn nedir — bir paket yöneticisi?

yarn (Yet Another Resource Negotiator), Ekim 2016'da Facebook'un npm 2-4'ün sorunlarına (yavaş kurulum, lock dosyası eksikliği ve güvensiz paketler) yanıtı olarak piyasaya sürüldü. yarn, paralel paket indirme, deterministik yarn.lock ve sağlama toplamlarıyla bütünlük doğrulaması getirdi. 2020'de yarn, Plug'n'Play ve TypeScript-first yaklaşımıyla sürüm 2'ye (Berry) geçti.

yarn mimarisi npm'den farklıdır: yarn paketleri paralel olarak indirir (npm sürüm 5'ten önce — sırayla), her paketi ~/.cache/yarn'da projeler arasında tekrarsız önbelleğe alır ve sağlama toplamlarıyla bütünlüğü doğrular. yarn her kurulumda yarn.lock oluştururken, npm'de package-lock.json yalnızca sürüm 5'te ortaya çıktı.

yarn 2'den (Berry, 2020) itibaren yarn tamamen TypeScript ile yeniden yazıldı ve Plug'n'Play, workspaces, monorepolar için constraints ve farklı kaynaklardan (npm, git, tarball) kurulum protokollerini destekler. yarn 3+ (2022) Zero-Installs'ı ekledi — ağ erişimi olmadan anında kurulum için önbelleği depoda saklama.

yarn bağımlılık kurulumunu nasıl yönetir

yarn install — package.json ve yarn.lock'u okuyan ve bağımlılıkları kuran ana komuttur. yarn paketleri paralel olarak indirir, bu da npm 4 ve önceki sürümlere kıyasla kurulumu 2-3 kat hızlandırır. yarn çevrimdışı önbellek kullanır: bir paket başka bir projede zaten indirilmişse, yeniden indirilmek yerine önbellekten kopyalanır.

bash
# Temel yarn komutları
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Etkileşimli güncelleme
$ yarn upgrade-interactive
# Yinelenen paketleri kaldır
$ yarn dedupe

yarn add — yeni bir paket kurma komutu. yarn add <package> dependencies'e ekler, yarn add --dev — devDependencies'e ekler. yarn otomatik olarak yarn.lock'u günceller. yarn upgrade paketleri anlamsal aralık içinde en son sürümlere günceller. yarn upgrade-interactive — güncellenecek belirli paketleri seçmek için etkileşimli mod.

yarn cache — ~/.cache/yarn/v6'da küresel bir önbellek. Her paket bir sağlama toplamıyla ZIP arşivinde bir kez depolanır. yarn önbelleği otomatik olarak temizlenir, ancak manuel olarak yarn cache clean çalıştırabilirsiniz. yarn cache dir önbellek yolunu gösterir. yarn cache list — önbelleğe alınmış paketleri listeler.

yarn.lock: amaç ve dosya yapısı

yarn.lock — tüm bağımlılıkların ve bunların geçişli paketlerinin tam sürümlerini kaydeden bir lock dosyası. package-lock.json'dan (JSON) farklı olarak yarn.lock, düz yapılı YAML formatı kullanır. yarn.lock her zaman yarn install veya yarn add sırasında otomatik olarak oluşturulur — bu, tüm geliştiricilerin ve CI sunucularının aynı paket setini almasını sağlar.

yaml
# Örnek yarn.lock yapısı
react@^18.3.0:
  version: "18.3.1"
  resolution: "react@npm:18.3.1"
  dependencies:
    loose-envify: "^1.1.0"
  checksum: "abc123def456..."

react-native@^0.76.0:
  version: "0.76.3"
  resolution: "react-native@npm:0.76.3"
  dependencies:
    react: "18.3.1"
  checksum: "def789ghi012..."

yarn.lock alanları: version — tam paket sürümü, resolution — kaynak ve sürüm, dependencies — bağımlılıkları, checksum — doğrulama için sağlama toplamı. yarn.lock depoya commit edilir ve bağımlılıklar için tek gerçek kaynaktır. yarn.lock ve package.json farklılaşırsa, yarn bir uyarı verir.

Yarn constraints — yarn.lock'ta bağımlılık sürümlerini kontrol eden ve zorlayan monorepolar için bir kural sistemidir. Kısıtlamalar, Yarn Constraint Language kullanılarak yarn.constraints.js dosyasında tanımlanır. Constraints, bir monorepodaki tüm paketlerin aynı React veya TypeScript sürümünü kullanmasını sağlamaya olanak tanır.

React Native ekosisteminde yarn

React Native geleneksel olarak yarn ile yakından ilişkilidir. Expo CLI, React Native CLI ve Create React Native App başlangıçta yarn kullanıyordu. React Native projelerinde yarn.lock, yerel modüllerin sürümlerini sabitler; bu, CocoaPods (iOS) ve Gradle (Android) aracılığıyla kararlı derleme için kritik öneme sahiptir. Paylaşılan kod içeren React Native monorepolarda yarn workspaces popülerdir.

React Native monorepolarda yarn workspaces: kök package.json "workspaces": ["packages/*", "mobile"] içerir. yarn install, kök düzeyde tek bir node_modules klasörü oluşturur. Paketler sembolik bağlar aracılığıyla birbirlerine referans verir. Yerel bağımlılıklar değiştirildikten sonra CocoaPods'u güncellemek için npx pod-install çalıştırılır.

json
{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/mobile",
    "apps/web"
  ],
  "scripts": {
    "mobile:start": "yarn workspace mobile start",
    "mobile:ios": "yarn workspace mobile ios",
    "lint": "yarn workspaces run lint"
  }
}

Expo SDK 50+, npx create-expo-app ile oluşturulan yeni projeler için resmi olarak yarn'ı önerir. yarn, Expo modülleriyle uyumluluğu sağlar ve otomatik olarak doğru yarn.lock'u oluşturur. yarn 3+'teki Zero-Installs, önbelleğin depoya commit edilmesine olanak tanır — geliştiriciler git clone'dan sonra bağımlılık kurmadan kullanıma hazır bir ortam elde eder.

yarn ve npm: karşılaştırmalı analiz

npm ve yarn aynı sorunu çözer — Node.js paketlerini yönetme. npm 5-7'nin piyasaya sürülmesiyle işlevsel fark neredeyse ortadan kalktı. npm 7+, workspaces, npm ci (yarn install --frozen-lockfile eşdeğeri) ve paralel kurulum içerir. Bununla birlikte yarn, belirli senaryolarda avantajlarını korur: Plug'n'Play, Zero-Installs ve olgun bir constraints sistemi.

Özelliknpmyarn
Oluşturulma yılı20102016
Lock dosyasıpackage-lock.json (JSON)yarn.lock (YAML)
KurulumSıralı (npm 5+)Paralel
Plug'n'PlayHayırEvet (yarn 2+)
WorkspacesEvet (npm 7+)Evet
Zero-InstallsHayırEvet (yarn 3+)
ÖnbellekDüzleştirmeli node_modulesKüresel ~/.cache/yarn
Uygulama diliJavaScriptTypeScript (yarn 2+)

yarn ne zaman seçilmeli: Expo SDK 50+ projeleri, büyük monorepolar (100+ paket), hızlı ortam kurulumu için Zero-Installs'a değer veren ekipler ve halihazırda yarn kullanan eski projeler. npm ne zaman seçilmeli: standart create-react-app projeleri, Next.js, Vite, belirli paket yöneticisi gereksinimleri olmayan ekipler.

yarn 4 (2024) geliştirilmiş performans, yerel ESM desteği ve büyük monorepolar için optimizasyon getirdi. npm 10+, güvenlik ve uyumluluğa odaklanarak gelişmeye devam ediyor. Bugün npm ve yarn arasındaki seçim, ekip tercihleri ve belirli proje gereksinimleri meselesidir, bir aracın diğerine teknik üstünlüğü değildir.

Sıkça Sorulan Sorular

yarn ve npm arasındaki temel fark nedir?

yarn başlangıçta paralel paket kurulumu ve agresif önbellekleme sayesinde hızda npm'i geride bıraktı. yarn.lock her kurulumda otomatik olarak oluşturulurken, package-lock.json npm 5'te ortaya çıktı. yarn, sıfır kurulum süresiyle node_modules'a alternatif olan Plug'n'Play'i sunar. npm 7+ ile temel senaryolarda hız ve işlevsellik farkı minimumdur.

Monorepolarda yarn workspaces nasıl çalışır?

yarn workspaces — tek bir depoda birden çok paketi yönetme mekanizması. Kök package.json "workspaces": ["packages/*"] alanını içerir. yarn install, paylaşılan bağımlılıkları üst düzeyde tek bir node_modules'a kurar, yerel paketler arasında sembolik bağlar oluşturur ve tekrarı önler. Tüm workspace'ler için komutlar yarn workspaces run <script> aracılığıyla çalıştırılır.

yarn Plug'n'Play nedir ve neden gereklidir?

Plug'n'Play (PnP) — yarn 2'de tanıtılan geleneksel node_modules klasörüne bir alternatif. Dosyaları kopyalamak yerine yarn, .pnp.cjs'de bir bağımlılık haritası oluşturur ve paketleri küresel önbellekte ZIP arşivlerinde depolar. PnP avantajları: saniyeler içinde kurulum, Node.js başlatma süresinde %30-50 azalma, node_modules ve ilgili yol sorunları yok.

npm'den yarn'a proje nasıl taşınır?

yarn'ı küresel olarak kurun: npm install -g yarn. Proje kökünde yarn import çalıştırın — yarn, package-lock.json'ı okur ve eşdeğer bir yarn.lock oluşturur. node_modules ve package-lock.json'ı silin, doğrulamak için yarn install çalıştırın. npm'yi yarn ile değiştirerek CI/CD yapılandırmasını güncelleyin. yarn, package.json ile tamamen uyumludur.

yarn'da sürüm kilidi hataları nasıl düzeltilir?

"Integrity check failed" hatası, yarn.lock ve node_modules senkronize olmadığında oluşur. Çözüm: node_modules, yarn.lock'u silin ve önbelleği temizleyin (yarn cache clean), ardından yarn install'ı yeniden çalıştırın. Sürüm çakışmaları için belirli güncellemeleri seçmek üzere yarn upgrade-interactive kullanın. yarn dedupe yinelenen paketleri kaldıracaktır.

Özet

  • yarn — Facebook tarafından 2016'da oluşturulan alternatif bir Node.js paket yöneticisi
  • yarn.lock — YAML formatında tüm bağımlılıkların tam sürümlerini kaydeden lock dosyası
  • yarn install — küresel çevrimdışı önbellek kullanarak paralel paket kurulumu
  • Plug'n'Play — node_modules klasörü olmayan yenilikçi bir yarn 2+ mekanizması
  • yarn workspaces — tek node_modules ile monorepo yönetimi
  • React Native'de yarn — Expo ve React Native projeleri için standart paket yöneticisi
  • Zero-Installs — paket indirmeden anında kurulum için depoya önbellek commit'i

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun