Skip to content

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

Nikita Elfimov edited this page Aug 29, 2021 · 6 revisions

Что это?

yarn.lock - это файл, находящийся в корне проекта, в котором фиксируются версии зависимостей.

Какую проблему решает?

Ситуация

Представим, что есть проект и 2 разработчика: A и B. Оба склонировали проект в одно время и приступили к работе. Через пару дней разработчик A попросил разработчика B запустить его проект и проверить его работоспособность, предварительно сделав коммит. Разработчик B переключился в ветку разработчика A, сделал install и... проект не запустился, хотя код и package.json одинаковые.

Пояснение

Как это могло произойти?

Чуть позже выяснилось, что за эти 2 дня у библиотеки С, которая использовалась на проекте, вышло обновление, ломающее обратную совместимость, но разработчик A свои зависимости в ходе работы не обновлял, так что его проект работал со старой версией библиотеки, но когда в его ветку переключился разработчик B - он установил последнюю версию библиотеки C, на которой проект перестал работать

Проблема

На проекте нужно создать регламент версий зависимостей, при которых проект будет работать

Решение - yarn.lock

Нужно ли что-то делать с yarn.lock самостоятельно?

Однозначно нет. Его нельзя трогать руками (да и нет в этом смысла), а при его удалении воспроизведется сценарий из нашей ситуации выше. Да, он сгенерируется снова, но в yarn.lock будут зафиксированы уже новейшие версии зависимостей, при которых проект возможно перестанет работать. Yarn модифицирует его автоматически, при необходимости.

Нужно ли коммитить yarn.lock?

Полагаю, после ситуации описанной выше вопрос скорее риторический. Да, нужно

Откуда берутся версии, которые фиксируются в yarn.lock?

Из package.json'ов на проекте. При первой установке yarn берет зависимости в соответствии с теми, что указаны в пекеджах, а потом эти зависимости фиксируются