← Назад к вопросам

Зачем нужен Yarn.lock?

1.0 Junior🔥 71 комментариев
#Инструменты и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Зачем нужен yarn.lock?

yarn.lock — это файл, который фиксирует точные версии всех зависимостей проекта и их подзависимостей. Это критически важный файл для воспроизводимости сборки и консистентности между разработчиками.

Проблема без yarn.lock

Веб-проект использует пакеты из npm-реестра. В package.json мы указываем версии с диапазонами:

{
  "dependencies": {
    "react": "^19.0.0",
    "lodash": "~4.17.0",
    "axios": "1.6.x"
  }
}

Проблема: ^19.0.0 означает совместимо с 19.x.x, что позволит установить 19.0.5, 19.1.0, 19.2.3 и т.д. Это может привести к несогласованности:

  1. Разработчик A установил react@19.0.5
  2. Разработчик B установил react@19.1.0
  3. CI/CD сервер установил react@19.2.0

Вероятны баги из-за разных версий!

Решение: yarn.lock

yarn.lock содержит точные версии и хеши всех пакетов:

react@^19.0.0:
  version "19.0.5"
  resolved "https://registry.yarnpkg.com/react/-/react-19.0.5.tgz#abc123"
  integrity sha512-...

axios@1.6.x:
  version "1.6.8"
  resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#xyz"
  integrity sha512-...

follow-redirects@^1.7.0:
  version "1.7.5"
  resolved "..."

Теперь все установят точно react@19.0.5 и axios@1.6.8.

Как yarn.lock работает

Первый запуск (свежий проект)

git clone project
cd project
yarn install

Yarn читает package.json, скачивает пакеты, создаёт yarn.lock с точными версиями.

Последующие установки

yarn install

Yarn читает yarn.lock и устанавливает точно те же версии, что записаны там. Пропускает загрузку и переговоры версий.

Процесс обновления

Если нужно обновить зависимость:

yarn upgrade react@20.0.0

yarn.lock обновляется автоматически.

yarn.lock vs package-lock.json

В npm используется package-lock.json (аналогичная функция):

  • yarn.lock в Yarn
  • package-lock.json в npm

Оба решают одну проблему, но yarn.lock быстрее парсится и более стабилен.

Лучшие практики

1. Всегда коммитить yarn.lock в git

git add package.json yarn.lock
git commit -m "Add dependency"

.gitignore должен содержать node_modules/, но НЕ yarn.lock.

2. Использовать yarn.lock при CI/CD

yarn install --frozen-lockfile

Флаг --frozen-lockfile убедиться, что версии точно совпадают с yarn.lock.

3. Разрешить разработчикам обновляться

developer-1$ yarn upgrade
git add yarn.lock && git commit

developer-2$ git pull
developer-2$ yarn install

Почему это критично

Без yarn.lock: разработчики получают разные версии, CI/CD использует третьи версии, баги несогласованны, медленный debug.

С yarn.lock: все устанавливают одно и то же, консистентность везде, проблемы воспроизводятся одинаково, быстро фиксится.

Заключение

yarn.lock — это файл, который обеспечивает:

  • Воспроизводимость — одна и та же среда везде
  • Безопасность — контроль над версиями
  • Скорость — yarn не пересчитывает разрешение зависимостей
  • Команду — все работают с одинаковыми пакетами

Без yarn.lock разработка становится хаотичной и сложнопредсказуемой.