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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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