Я вижу, что это два отдельных вопроса в одном. Позвольте мне ответить на оба.
Вы должны зафиксировать файл в репо?
Да. Как упомянуто в ответе ckuijjer, в Руководстве по миграции рекомендуется включить этот файл в репозиторий. Читайте дальше, чтобы понять, почему вам нужно это сделать.
Что такое yarn.lock
?
Это файл, в котором хранятся точные версии зависимостей для вашего проекта вместе с контрольными суммами для каждого пакета. Это способ обеспечения согласованности для ваших зависимостей.
Чтобы понять, зачем нужен этот файл, сначала нужно понять, в чем была проблема оригинального NPM package.json
. Когда вы устанавливаете пакет, NPM будет хранить диапазон разрешенных ревизий зависимости вместо конкретной ревизии (semver). NPM будет пытаться получить обновление самой последней версии зависимости в указанном диапазоне (т. Е. Обновления исправлений без прерываний). У этого подхода есть две проблемы.
Авторы зависимостей могут выпускать обновления версий исправлений, хотя на самом деле вносят существенные изменения, которые повлияют на ваш проект.
Два разработчика, работающие npm install
в разное время, могут получить различный набор зависимостей. Что может привести к невозможности воспроизведения ошибки в двух абсолютно одинаковых средах. Это может вызвать проблемы стабильности сборки для серверов CI, например.
Пряжа, с другой стороны, идет по пути максимальной предсказуемости. Создает yarn.lock
файл для сохранения точных версий зависимостей. Имея этот файл на месте, пряжа будет использовать версии, хранящиеся в, yarn.lock
вместо разрешения версий из package.json
. Эта стратегия гарантирует, что ни одна из проблем, описанных выше, не произойдет.
yarn.lock
похоже на npm-shrinkwrap.json
то, что может быть создано npm shrinkwrap
командой. Проверьте этот ответ, объясняя различия между этими двумя файлами.