yarn — Facebook tərəfindən Exponent, Google və Tilde ilə əməkdaşlıq edərək 2016-cı ildə yaradılmış Node.js üçün alternativ paket meneceri. yarn npm 2-4-ün sürət və təhlükəsizlik problemlərini həll edirdi: paralel quraşdırma, ciddi lock-faylı və oflayn keş. Bu gün yarn React Native, Expo və monorepozitoriyalarda populyarlığını qoruyur. Ətraflı — yarn Documentation.
Əsas məqamlar
yarn (Yet Another Resource Negotiator) 2016-cı ilin oktyabrında Facebook-un npm 2-4-ün problemlərinə cavabı olaraq buraxıldı: yavaş quraşdırma, lock-faylın olmaması və təhlükəsiz olmayan paketlər. yarn paralel paket yükləmə, deterministik yarn.lock və nəzarət məbləğləri vasitəsilə bütövlük yoxlaması təklif etdi. 2020-ci ildə yarn Plug'n'Play və TypeScript-first yanaşması ilə 2-ci versiyaya (Berry) keçdi.
yarn arxitekturası npm-dən fərqlənir: yarn paketləri paralel yükləyir (npm 5-ci versiyaya qədər — ardıcıl), hər paketi ~/.cache/yarn-da layihələr arasında təkrarlanmadan keşləyir və bütövlüyü checksum vasitəsilə yoxlayır. yarn hər quraşdırmada yarn.lock yaradır, npm-də isə package-lock.json yalnız 5-ci versiyada peyda oldu.
yarn 2-dən (Berry, 2020) başlayaraq, yarn tamamilə TypeScript-də yenidən yazılmışdır və Plug'n'Play, workspaces, monorepozitoriyalar üçün constraints və müxtəlif mənbələrdən (npm, git, tarball) quraşdırma protokollarını dəstəkləyir. yarn 3+ (2022) şəbəkə olmadan ani quraşdırma üçün keşin repozitoriyada saxlanmasını təmin edən Zero-Installs əlavə etdi.
yarn install — package.json və yarn.lock-u oxuyan və asılılıqları quraşdıran əsas əmrdir. yarn paketləri paralel yükləyir, bu da quraşdırmanı npm 4 və daha erkən versiyalarla müqayisədə 2-3 dəfə sürətləndirir. yarn oflayn keşdən istifadə edir: əgər paket başqa bir layihədə artıq yüklənibsə, yenidən yüklənmir, keşdən kopyalanır.
# Yarn-ın əsas əmrləri
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# İnteraktiv yeniləmə
$ yarn upgrade-interactive
# Təkrarlanan paketlərin silinməsi
$ yarn dedupe
yarn add — yeni paket quraşdırmaq üçün əmr. yarn add <package> dependencies-ə əlavə edir, yarn add --dev — devDependencies-ə. yarn avtomatik olaraq yarn.lock-u yeniləyir. yarn upgrade paketləri semantik diapazon çərçivəsində ən son versiyalara yeniləyir. yarn upgrade-interactive — yeniləmə üçün konkret paketlərin seçilməsinin interaktiv rejimi.
yarn cache — ~/.cache/yarn/v6-da qlobal keş. Hər paket nəzarət məbləği ilə ZIP arxivində bir dəfə saxlanılır. yarn cache avtomatik təmizlənir, lakin əl ilə yarn cache clean yerinə yetirilə bilər. yarn cache dir keşə yolu göstərir. yarn cache list — keşlənmiş paketlərin siyahısı.
yarn.lock — bütün asılılıqların və onların tranzitiv paketlərinin dəqiq versiyalarını təsbit edən fayl. package-lock.json-dan (JSON) fərqli olaraq, yarn.lock YAML formatından yastı strukturu ilə istifadə edir. yarn.lock həmişə yarn install və ya yarn add zamanı avtomatik yaradılır — bu, bütün tərtibatçıların və CI serverlərinin eyni paket dəstini almasına zəmanət verir.
# yarn.lock struktur nümunəsi
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 sahələri: version — paketin dəqiq versiyası, resolution — mənbə və versiya, dependencies — onun asılılıqları, checksum — yoxlama üçün nəzarət məbləği. yarn.lock repozitoriyaya commit edilir və asılılıqlar üçün yeganə həqiqət mənbəyidir. yarn.lock və package.json uyğun gəlmirsə, yarn xəbərdarlıq verir.
Yarn constraints — yarn.lock-da asılılıq versiyalarını yoxlayan və məcburi təyin edən monorepozitoriyalar üçün qaydalar sistemi. Məhdudiyyətlər yarn.constraints.js faylında Yarn Constraint Language dilində təsvir olunur. Constraints monorepozitoriyadakı bütün paketlərin eyni React və ya TypeScript versiyasından istifadə etməsinə zəmanət verməyə imkan verir.
React Native ənənəvi olaraq yarn ilə sıx bağlıdır. Expo CLI, React Native CLI və Create React Native App əvvəlcə yarn-dan istifadə edirdi. React Native layihələrində yarn.lock yerli modulların versiyalarını təsbit edir, bu da CocoaPods (iOS) və Gradle (Android) vasitəsilə sabit kompilasiya üçün kritik əhəmiyyət daşıyır. yarn workspaces ümumi kod ilə React Native monorepozitoriyalarında populyardır.
yarn workspaces React Native monorepozitoriyalarında: kök package.json "workspaces": ["packages/*", "mobile"] ehtiva edir. yarn install kök səviyyədə vahid node_modules qovluğu yaradır. Paketlər bir-birinə simlinklər vasitəsilə istinad edir. npx pod-install yerli asılılıqlar dəyişdirildikdən sonra CocoaPods-ı yeniləmək üçün yerinə yetirilir.
{
"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 vasitəsilə yaradılan yeni layihələr üçün rəsmi olaraq yarn tövsiyə edir. yarn Expo modulları ilə uyğunluğu təmin edir və düzgün yarn.lock yaradır. Zero-Installs yarn 3+-da keşi repozitoriyaya commit etməyə imkan verir — tərtibatçılar git clone-dan sonra asılılıqları quraşdırmadan hazır mühit əldə edirlər.
npm və yarn eyni vəzifəni həll edir — Node.js paketlərinin idarə edilməsi. npm 5-7-nin buraxılması ilə funksional fərq praktiki olaraq yox oldu. npm 7+ workspaces, npm ci (yarn install --frozen-lockfile analoqu) və paralel quraşdırmanı əhatə edir. Bununla belə, yarn spesifik ssenarilərdə üstünlüklərini qoruyur: Plug'n'Play, Zero-Installs və yetkin constraints sistemi.
| Xüsusiyyət | npm | yarn |
|---|---|---|
| Yaranma ili | 2010 | 2016 |
| Lock-fayl | package-lock.json (JSON) | yarn.lock (YAML) |
| Quraşdırma | Ardıcıl (npm 5+) | Paralel |
| Plug'n'Play | Xeyr | Bəli (yarn 2+) |
| Workspaces | Bəli (npm 7+) | Bəli |
| Zero-Installs | Xeyr | Bəli (yarn 3+) |
| Keş | node_modules flattening ilə | Qlobal ~/.cache/yarn |
| Tətbiq dili | JavaScript | TypeScript (yarn 2+) |
Yarn nə vaxt seçilməlidir: Expo SDK 50+ layihələri, böyük monorepozitoriyalar (100+ paket), mühitin sürətli qurulması üçün Zero-Installs dəyər verən komandalar və artıq yarn istifadə edən legacy layihələr. npm nə vaxt seçilməlidir: standart create-react-app, Next.js, Vite layihələri, paket menecerinə xüsusi tələbləri olmayan komandalar.
yarn 4 (2024) təkmilləşdirilmiş performans, yerli ESM dəstəyi və böyük monorepozitoriyalar üçün optimallaşdırma təqdim etdi. npm 10+ təhlükəsizlik və uyğunluğa diqqət yetirərək inkişafını davam etdirir. npm və yarn arasında seçim bu gün bir alətin texniki üstünlüyü deyil, komanda üstünlükləri və layihənin konkret tələbləri məsələsidir.
Tez-tez verilən suallar
yarn əvvəlcə paketlərin paralel quraşdırılması və aqressiv keşləmə hesabına npm-i sürətdə qabaqlayırdı. yarn.lock hər quraşdırmada avtomatik yaradılır, package-lock.json isə npm 5-də ortaya çıxdı. yarn Plug'n'Play — sıfır quraşdırma vaxtı ilə node_modules-a alternativ təklif edir. npm 7+ ilə əsas ssenarilər üçün sürət və funksionallıq fərqi minimaldır.
yarn workspaces — bir repozitoriyada bir neçə paketin idarə edilməsi mexanizmi. Kök package.json "workspaces": ["packages/*"] sahəsini ehtiva edir. yarn install ümumi asılılıqları yuxarı səviyyədə vahid node_modules-da quraşdırır, yerli paketlər arasında simlinklər yaradır və təkrarlanmanın qarşısını alır. Əmrlər yarn workspaces run <script> vasitəsilə bütün workspace-lər üçün işə salınır.
Plug'n'Play (PnP) — yarn 2-də təqdim edilmiş ənənəvi node_modules qovluğuna alternativ. Faylları kopyalamaq əvəzinə yarn .pnp.cjs-də asılılıq xəritəsi yaradır və paketləri qlobal keşdə ZIP arxivlərində saxlayır. PnP üstünlükləri: saniyələr ərzində quraşdırma, Node.js-in işə düşmə müddətinin 30-50% azalması, node_modules və onunla bağlı yol problemlərinin olmaması.
yarn-ı qlobal quraşdırın: npm install -g yarn. Layihənin kökündə yarn import yerinə yetirin — yarn package-lock.json-u oxuyacaq və ekvivalent yarn.lock yaradacaq. node_modules və package-lock.json-u silin, yoxlama üçün yarn install yerinə yetirin. npm-i yarn ilə əvəz edərək CI/CD konfiqurasiyasını yeniləyin. yarn package.json ilə tam uyğundur.
"Integrity check failed" xətası yarn.lock və node_modules arasında uyğunsuzluq olduqda baş verir. Həll yolu: node_modules, yarn.lock-u silin və keşi təmizləyin (yarn cache clean), sonra yarn install-i yenidən yerinə yetirin. Versiya münaqişələri üçün konkret yeniləmələri seçmək üçün yarn upgrade-interactive istifadə edin. yarn dedupe təkrarlanan paketləri siləcək.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun