yarn: суть, альтернативний менеджер пакетів для React Native

Автор: IT Sectr Опубліковано: 2026-02-13 Час читання: 10 хв

yarn — альтернативний менеджер пакетів для Node.js, створений Facebook спільно з Exponent, Google та Tilde у 2016 році. yarn вирішував проблеми швидкості та безпеки npm 2-4: паралельне встановлення, строгий lock-файл та офлайн-кеш. Сьогодні yarn зберігає популярність у React Native, Expo та монорепозиторіях. Детальніше — на yarn Documentation.

Головне

  • yarn — менеджер пакетів для Node.js, створений Facebook у 2016 році для вирішення проблем npm
  • yarn.lock — файл фіксації точних версій усіх залежностей, що створюється автоматично
  • yarn install — паралельне встановлення пакетів з використанням глобального кеша без дублювання
  • yarn workspaces — механізм управління монорепозиторіями зі спільною папкою node_modules
  • Plug'n'Play — альтернатива node_modules зі зберіганням пакетів у ZIP-архівах у глобальному кеші

Що таке yarn — менеджер пакетів?

yarn (Yet Another Resource Negotiator) випущено в жовтні 2016 року як відповідь Facebook на проблеми npm 2-4: повільне встановлення, відсутність lock-файлу та небезпечні пакети. yarn запропонував паралельне завантаження пакетів, детермінований yarn.lock та перевірку цілісності через контрольні суми. У 2020 році yarn перейшов на версію 2 (Berry) з Plug'n'Play та TypeScript-first підходом.

Архітектура yarn відрізняється від npm: yarn завантажує пакети паралельно (npm до версії 5 — послідовно), кешує кожен пакет у ~/.cache/yarn без дублювання між проектами та перевіряє цілісність через checksum. yarn завжди генерує yarn.lock при будь-якому встановленні, тоді як package-lock.json у npm з'явився лише у версії 5.

Починаючи з yarn 2 (Berry, 2020), yarn повністю переписано на TypeScript і він підтримує Plug'n'Play, workspaces, constraints для монорепозиторіїв та протоколи встановлення з різних джерел (npm, git, tarball). yarn 3+ (2022) додав Zero-Installs — зберігання кеша в репозиторії для миттєвого встановлення без мережі.

Як yarn керує встановленням залежностей

yarn install — основна команда, яка читає package.json та yarn.lock і встановлює залежності. yarn завантажує пакети паралельно, що прискорює встановлення в 2-3 рази порівняно з npm 4 та більш ранніми версіями. yarn використовує офлайн-кеш: якщо пакет уже завантажено в іншому проекті, він копіюється з кеша, а не завантажується знову.

bash
# Основні команди yarn
$ yarn install
$ yarn add react-native-webview
$ yarn add --dev typescript
$ yarn global add expo-cli
# Інтерактивне оновлення
$ yarn upgrade-interactive
# Видалення дубльованих пакетів
$ yarn dedupe

yarn add — команда для встановлення нового пакета. yarn add <package> додає в dependencies, yarn add --dev — в devDependencies. yarn автоматично оновлює yarn.lock. yarn upgrade оновлює пакети до останніх версій у межах семантичного діапазону. yarn upgrade-interactive — інтерактивний режим вибору конкретних пакетів для оновлення.

yarn cache — глобальний кеш у ~/.cache/yarn/v6. Кожен пакет зберігається один раз у ZIP-архіві з контрольною сумою. yarn cache чиститься автоматично, але можна виконати yarn cache clean вручну. yarn cache dir показує шлях до кеша. yarn cache list — список кешованих пакетів.

yarn.lock: призначення та структура файлу

yarn.lock — файл фіксації точних версій усіх залежностей та їх транзитивних пакетів. На відміну від package-lock.json (JSON), yarn.lock використовує формат YAML з плоскою структурою. yarn.lock завжди генерується автоматично при yarn install або yarn add — це гарантує, що всі розробники та CI-сервери отримають ідентичний набір пакетів.

yaml
# Приклад структури yarn.lock
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: version — точна версія пакета, resolution — джерело та версія, dependencies — його залежності, checksum — контрольна сума для верифікації. yarn.lock комітиться в репозиторій і є єдиним джерелом істини для залежностей. Якщо yarn.lock та package.json розходяться, yarn видає попередження.

Yarn constraints — система правил для монорепозиторіїв, яка перевіряє та примусово задає версії залежностей у yarn.lock. Обмеження описуються у файлі yarn.constraints.js на Yarn Constraint Language. Constraints дозволяють гарантувати, що всі пакети в монорепозиторії використовують однакову версію React або TypeScript.

yarn в екосистемі React Native

React Native традиційно тісно пов'язаний з yarn. Expo CLI, React Native CLI та Create React Native App спочатку використовували yarn. У проектах React Native yarn.lock фіксує версії нативних модулів, що критично важливо для стабільної компіляції через CocoaPods (iOS) та Gradle (Android). yarn workspaces популярні в монорепозиторіях React Native зі спільним кодом.

yarn workspaces в монорепозиторіях React Native: кореневий package.json містить "workspaces": ["packages/*", "mobile"]. yarn install створює єдину папку node_modules на кореневому рівні. Пакети посилаються один на одного через симлінки. npx pod-install виконується після зміни нативних залежностей для оновлення CocoaPods.

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+ офіційно рекомендує yarn для нових проектів, створених через npx create-expo-app. yarn забезпечує сумісність з Expo-модулями та автоматично генерує правильний yarn.lock. Zero-Installs у yarn 3+ дозволяє комітити кеш у репозиторій — розробники отримують готове середовище без встановлення залежностей після git clone.

yarn та npm: порівняльний аналіз

npm та yarn вирішують одне завдання — управління пакетами Node.js. З виходом npm 5-7 функціональний розрив практично зник. npm 7+ включає workspaces, npm ci (аналог yarn install --frozen-lockfile) та parallel install. Однак yarn зберігає переваги в специфічних сценаріях: Plug'n'Play, Zero-Installs та зріла система constraints.

Характеристикаnpmyarn
Рік створення20102016
Lock-файлpackage-lock.json (JSON)yarn.lock (YAML)
ВстановленняПослідовне (npm 5+)Паралельне
Plug'n'PlayНіТак (yarn 2+)
WorkspacesТак (npm 7+)Так
Zero-InstallsНіТак (yarn 3+)
Кешnode_modules з flatteningГлобальний ~/.cache/yarn
Мова реалізаціїJavaScriptTypeScript (yarn 2+)

Коли вибрати yarn: проекти на Expo SDK 50+, великі монорепозиторії (100+ пакетів), команди, які цінують Zero-Installs для швидкого налаштування середовища, та legacy-проекти, що вже використовують yarn. Коли вибрати npm: стандартні проекти create-react-app, Next.js, Vite, команди без специфічних вимог до менеджера пакетів.

yarn 4 (2024) представив покращену продуктивність, native ESM підтримку та оптимізацію для великих монорепозиторіїв. npm 10+ продовжує розвиватися з фокусом на безпеку та сумісність. Вибір між npm та yarn сьогодні — питання командних уподобань та конкретних вимог проекту, а не технічної переваги одного інструменту.

Часті запитання

У чому головна відмінність yarn від npm?

yarn спочатку випереджав npm за швидкістю завдяки паралельному встановленню пакетів та агресивному кешуванню. yarn.lock автоматично генерується при будь-якому встановленні, тоді як package-lock.json з'явився в npm 5. yarn пропонує Plug'n'Play — альтернативу node_modules з нульовим часом встановлення. З npm 7+ різниця у швидкості та функціоналі для базових сценаріїв мінімальна.

Як працюють yarn workspaces в монорепозиторіях?

yarn workspaces — механізм управління кількома пакетами в одному репозиторії. Кореневий package.json містить поле "workspaces": ["packages/*"]. yarn install встановлює спільні залежності на верхньому рівні в єдину node_modules, створює симлінки між локальними пакетами та уникає дублювання. Команди запускаються для всіх workspace через yarn workspaces run <script>.

Що таке yarn Plug'n'Play і для чого він потрібен?

Plug'n'Play (PnP) — альтернатива традиційній папці node_modules, представлена в yarn 2. Замість копіювання файлів yarn створює карту залежностей у .pnp.cjs та зберігає пакети в ZIP-архівах у глобальному кеші. Переваги PnP: встановлення за секунди, час запуску Node.js скорочується на 30-50%, відсутність node_modules та пов'язаних з нею проблем зі шляхами.

Як мігрувати проект з npm на yarn?

Встановіть yarn глобально: npm install -g yarn. У корені проекту виконайте yarn import — yarn прочитає package-lock.json та створить еквівалентний yarn.lock. Видаліть node_modules та package-lock.json, виконайте yarn install для перевірки. Оновіть CI/CD конфігурацію, замінивши npm на yarn. yarn повністю сумісний з package.json.

Як виправити помилки блокування версій у yarn?

Помилка "Integrity check failed" виникає при невідповідності yarn.lock та node_modules. Рішення: видаліть node_modules, yarn.lock та очистіть кеш (yarn cache clean), потім виконайте yarn install заново. Для конфліктів версій використовуйте yarn upgrade-interactive для вибору конкретних оновлень. yarn dedupe видалить дубльовані пакети.

Підсумки

  • yarn — альтернативний менеджер пакетів Node.js, створений Facebook у 2016 році
  • yarn.lock — файл фіксації точних версій усіх залежностей у форматі YAML
  • yarn install — паралельне встановлення пакетів з використанням глобального офлайн-кеша
  • Plug'n'Play — інноваційний механізм yarn 2+ без папки node_modules
  • yarn workspaces — управління монорепозиторіями з єдиною node_modules
  • yarn в React Native — стандартний менеджер пакетів для Expo та React Native проектів
  • Zero-Installs — коміт кеша в репозиторій для миттєвого встановлення без завантаження пакетів

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також