yarn — Facebook tomonidan Exponent, Google va Tilde bilan hamkorlikda 2016-yilda yaratilgan Node.js uchun muqobil paket menejeri. yarn npm 2-4 ning tezlik va xavfsizlik muammolarini hal qilgan: parallel o'rnatish, qattiq lock-fayl va oflayn kesh. Bugungi kunda yarn React Native, Expo va monorepozitoriyalarda mashhurligini saqlab qolmoqda. Batafsil — yarn Documentation.
Asosiy
yarn (Yet Another Resource Negotiator) 2016-yil oktabr oyida Facebookning npm 2-4 muammolariga javobi sifatida chiqarilgan: sekin o'rnatish, lock-faylning yo'qligi va xavfli paketlar. yarn parallel paket yuklash, deterministik yarn.lock va nazorat summasi orqali yaxlitlikni tekshirishni taklif qildi. 2020-yilda yarn Plug'n'Play va TypeScript-first yondashuvi bilan 2-versiyaga (Berry) o'tdi.
Yarn arxitekturasi npmdan farq qiladi: yarn paketlarni parallel yuklaydi (npm 5-versiyagacha — ketma-ket), har bir paketni ~/.cache/yarn da loyihalar o'rtasida takrorlanmasdan keshlaydi va yaxlitlikni checksum orqali tekshiradi. yarn har bir o'rnatishda yarn.lock yaratadi, npmda esa package-lock.json faqat 5-versiyada paydo bo'ldi.
Yarn 2 (Berry, 2020) dan boshlab, yarn to'liq TypeScript da qayta yozilgan va Plug'n'Play, workspaces, monorepozitoriyalar uchun constraints va turli manbalardan (npm, git, tarball) o'rnatish protokollarini qo'llab-quvvatlaydi. yarn 3+ (2022) tarmoqsiz tezkor o'rnatish uchun keshnii repozitoriyada saqlashni ta'minlaydigan Zero-Installs qo'shdi.
yarn install — package.json va yarn.lockni o'qib, bog'liqliklarni o'rnatuvchi asosiy buyruq. yarn paketlarni parallel yuklaydi, bu esa o'rnatishni npm 4 va undan oldingi versiyalarga nisbatan 2-3 marta tezlashtiradi. yarn oflayn keshi ishlatadi: agar paket boshqa loyihada allaqachon yuklab olingan bo'lsa, u qayta yuklanmasdan, keshdan nusxalanadi.
# Yarnning asosiy buyruqlari
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Interaktiv yangilash
$ yarn upgrade-interactive
# Takrorlanuvchi paketlarni o'chirish
$ yarn dedupe
yarn add — yangi paket o'rnatish uchun buyruq. yarn add <package> dependencies ga qo'shadi, yarn add --dev — devDependencies ga. yarn avtomatik ravishda yarn.lockni yangilaydi. yarn upgrade paketlarni semantik diapazon doirasida eng so'nggi versiyalarga yangilaydi. yarn upgrade-interactive — yangilash uchun aniq paketlarni tanlashning interaktiv rejimi.
yarn cache — ~/.cache/yarn/v6 da global kesh. Har bir paket nazorat summasi bilan ZIP arxivda bir marta saqlanadi. yarn cache avtomatik tozalanadi, lekin qo'lda yarn cache clean bajarilishi mumkin. yarn cache dir keshga yo'lni ko'rsatadi. yarn cache list — keshlangan paketlar ro'yxati.
yarn.lock — barcha bog'liqliklar va ularning tranzitiv paketlarining aniq versiyalarini qayd qiluvchi fayl. package-lock.json (JSON) dan farqli ravishda, yarn.lock YAML formatidan yassi tuzilma bilan foydalanadi. yarn.lock har doim yarn install yoki yarn add paytida avtomatik yaratiladi — bu barcha dasturchilar va CI serverlari bir xil paketlar to'plamini olishini kafolatlaydi.
# yarn.lock tuzilish namunasi
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 maydonlari: version — paketning aniq versiyasi, resolution — manba va versiya, dependencies — uning bog'liqliklari, checksum — tekshirish uchun nazorat summasi. yarn.lock repozitoriyaga kommit qilinadi va bog'liqliklar uchun yagona haqiqat manbai hisoblanadi. Agar yarn.lock va package.json mos kelmasa, yarn ogohlantirish chiqaradi.
Yarn constraints — monorepozitoriyalar uchun yarn.lockda bog'liqlik versiyalarini tekshiruvchi va majburiy belgilovchi qoidalar tizimi. Cheklovlar yarn.constraints.js faylida Yarn Constraint Language da tavsiflanadi. Constraints monorepozitoriyadagi barcha paketlar bir xil React yoki TypeScript versiyasidan foydalanishini kafolatlash imkonini beradi.
React Native an'anaviy ravishda yarn bilan chambarchas bog'liq. Expo CLI, React Native CLI va Create React Native App dastlab yarn dan foydalangan. React Native loyihalarida yarn.lock native modullarning versiyalarini qayd qiladi, bu CocoaPods (iOS) va Gradle (Android) orqali barqaror kompilyatsiya uchun juda muhimdir. yarn workspaces umumiy kod bilan React Native monorepozitoriyalarida mashhur.
yarn workspaces React Native monorepozitoriyalarida: ildiz package.json "workspaces": ["packages/*", "mobile"] ni o'z ichiga oladi. yarn install ildiz darajasida yagona node_modules papkasini yaratadi. Paketlar bir-biriga simlinklar orqali murojaat qiladi. npx pod-install native bog'liqliklar o'zgartirilgandan so'ng CocoaPods-ni yangilash uchun bajariladi.
{
"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 orqali yaratilgan yangi loyihalar uchun rasmiy ravishda yarn ni tavsiya qiladi. yarn Expo modullari bilan moslikni ta'minlaydi va to'g'ri yarn.lock yaratadi. Zero-Installs yarn 3+ da keshni repozitoriyaga kommit qilish imkonini beradi — dasturchilar git clone dan so'ng bog'liqliklarni o'rnatmasdan tayyor muhitni olishadi.
npm va yarn bir xil vazifani hal qiladi — Node.js paketlarini boshqarish. npm 5-7 ning chiqishi bilan funksional farq amalda yo'qoldi. npm 7+ workspaces, npm ci (yarn install --frozen-lockfile analogi) va parallel o'rnatishni o'z ichiga oladi. Biroq, yarn muayyan stsenariylarda ustunliklarni saqlab qoladi: Plug'n'Play, Zero-Installs va yetuk constraints tizimi.
| Xususiyat | npm | yarn |
|---|---|---|
| Yaratilgan yili | 2010 | 2016 |
| Lock-fayl | package-lock.json (JSON) | yarn.lock (YAML) |
| O'rnatish | Ketma-ket (npm 5+) | Parallel |
| Plug'n'Play | Yo'q | Ha (yarn 2+) |
| Workspaces | Ha (npm 7+) | Ha |
| Zero-Installs | Yo'q | Ha (yarn 3+) |
| Kesh | node_modules flattening bilan | Global ~/.cache/yarn |
| Amalga oshirish tili | JavaScript | TypeScript (yarn 2+) |
Yarn qachon tanlanishi kerak: Expo SDK 50+ loyihalari, yirik monorepozitoriyalar (100+ paket), muhitni tez sozlash uchun Zero-Installsni qadrlaydigan guruhlar va allaqachon yarn dan foydalanayotgan eski loyihalar. npm qachon tanlanishi kerak: standart create-react-app, Next.js, Vite loyihalari, paket menejeriga maxsus talablari bo'lmagan guruhlar.
yarn 4 (2024) yaxshilangan unumdorlik, mahalliy ESM qo'llab-quvvatlash va yirik monorepozitoriyalar uchun optimallashtirishni taqdim etdi. npm 10+ xavfsizlik va moslikka e'tibor qaratib rivojlanishda davom etmoqda. npm va yarn o'rtasidagi tanlov bugungi kunda bir asbobning texnik ustunligi emas, balki guruhning afzalliklari va loyihaning aniq talablari masalasidir.
Tez-tez so'raladigan savollar
yarn dastlab paketlarni parallel o'rnatish va agressiv kesh tufayli npmni tezlikda ortda qoldirgan. yarn.lock har bir o'rnatishda avtomatik yaratiladi, package-lock.json esa npm 5da paydo bo'lgan. yarn Plug'n'Play — nol o'rnatish vaqti bilan node_modulesga muqobil taklif qiladi. npm 7+ bilan asosiy stsenariylar uchun tezlik va funksionallikdagi farq minimaldir.
yarn workspaces — bitta repozitoriyada bir nechta paketlarni boshqarish mexanizmi. Ildiz package.json "workspaces": ["packages/*"] maydonini o'z ichiga oladi. yarn install umumiy bog'liqliklarni yuqori darajadagi yagona node_modulesda o'rnatadi, mahalliy paketlar o'rtasida simlinklar yaratadi va takrorlanishni oldini oladi. Buyruqlar yarn workspaces run <script> orqali barcha workspace lar uchun ishga tushiriladi.
Plug'n'Play (PnP) — yarn 2da taqdim etilgan an'anaviy node_modules papkasiga muqobil. Fayllarni nusxalash o'rniga, yarn .pnp.cjs da bog'liqlik xaritasini yaratadi va paketlarni global keshda ZIP arxivlarida saqlaydi. PnP afzalliklari: bir necha soniyada o'rnatish, Node.js ishga tushirish vaqtining 30-50% ga qisqarishi, node_modules va u bilan bog'liq yo'l muammolarining yo'qligi.
Yarnni global o'rnating: npm install -g yarn. Loyihaning ildizida yarn import ni bajaring — yarn package-lock.json ni o'qib, ekvivalent yarn.lock yaratadi. node_modules va package-lock.json ni o'chiring, tekshirish uchun yarn install ni bajaring. npm ni yarn bilan almashtirib, CI/CD konfiguratsiyasini yangilang. yarn package.json bilan to'liq mos keladi.
"Integrity check failed" xatosi yarn.lock va node_modules o'rtasida nomuvofiqlik bo'lganda yuz beradi. Yechim: node_modules, yarn.lock ni o'chiring va keshni tozalang (yarn cache clean), so'ng yarn install ni qaytadan bajaring. Versiya ziddiyatlari uchun aniq yangilanishlarni tanlash uchun yarn upgrade-interactive dan foydalaning. yarn dedupe takrorlanuvchi paketlarni olib tashlaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.