yarn: mohiyati, React Native uchun muqobil paket menejeri

Muallif: IT Sectr Nashr etilgan: 2026-02-13 O'qish vaqti: 10 daq

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 — npm muammolarini hal qilish uchun Facebook tomonidan 2016-yilda yaratilgan Node.js paket menejeri
  • yarn.lock — barcha bog'liqliklarning aniq versiyalarini avtomatik ravishda qayd qiluvchi fayl
  • yarn install — takrorlanmasdan global keshi yordamida paketlarni parallel o'rnatish
  • yarn workspaces — umumiy node_modules papkasi bilan monorepozitoriyalarni boshqarish mexanizmi
  • Plug'n'Play — global keshda ZIP arxivlarida paketlarni saqlash bilan node_modulesga muqobil

Yarn nima — paket menejeri?

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 bog'liqliklarni o'rnatishni qanday boshqaradi

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.

bash
# 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: faylning maqsadi va tuzilishi

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.

yaml
# 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.

Yarn React Native ekotizimida

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.

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 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.

Yarn va npm: qiyosiy tahlil

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.

Xususiyatnpmyarn
Yaratilgan yili20102016
Lock-faylpackage-lock.json (JSON)yarn.lock (YAML)
O'rnatishKetma-ket (npm 5+)Parallel
Plug'n'PlayYo'qHa (yarn 2+)
WorkspacesHa (npm 7+)Ha
Zero-InstallsYo'qHa (yarn 3+)
Keshnode_modules flattening bilanGlobal ~/.cache/yarn
Amalga oshirish tiliJavaScriptTypeScript (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

Yarnning npmdan asosiy farqi nimada?

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.

Monorepozitoriyalarda yarn workspaces qanday ishlaydi?

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.

Yarn Plug'n'Play nima va nima uchun kerak?

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.

Loyihani npmdan yarn ga qanday migratsiya qilish mumkin?

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.

Yarn da versiyalarni bloklash xatolarini qanday tuzatish mumkin?

"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

  • yarn — Facebook tomonidan 2016-yilda yaratilgan Node.js uchun muqobil paket menejeri
  • yarn.lock — YAML formatida barcha bog'liqliklarning aniq versiyalarini qayd qiluvchi fayl
  • yarn install — global oflayn kesh yordamida paketlarni parallel o'rnatish
  • Plug'n'Play — node_modules papkasisiz yarn 2+ ning innovatsion mexanizmi
  • yarn workspaces — yagona node_modules bilan monorepozitoriyalarni boshqarish
  • yarn React Native da — Expo va React Native loyihalari uchun standart paket menejeri
  • Zero-Installs — paketlarni yuklamasdan tezkor o'rnatish uchun keshni repozitoriyaga kommit qilish

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.

Loyihani muhokama qilish

Shuningdek o'qing