Зачем нужен Yarn.lock?
Продвинутые темы
`yarn.lock` нужен, чтобы зафиксировать точные версии всех зависимостей (включая вложенные) — это гарантирует одинаковую установку пакетов у всех разработчиков и в CI/проде.
Проблема без lock-файла
В package.json версии указаны диапазонами (^1.2.0), поэтому yarn install в разное время или у разных людей может установить разные версии — «работает у меня, не работает у тебя».
Что делает yarn.lock
Фиксирует точные версии всех пакетов (прямых и транзитивных) и их хеши:
lodash@^4.17.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/..."
integrity sha512-...При установке Yarn читает lock-файл и ставит именно эти версии.
Зачем нужен
- Детерминированность — одинаковые зависимости у всех и в CI/проде.
- Воспроизводимость сборки — исключает «поплывшие» версии.
- Безопасность —
integrity-хеши проверяют целостность пакетов. - Явные изменения — обновление зависимости видно в диффе lock-файла.
Правила
- Коммитить
yarn.lockв репозиторий (обязательно). - Не редактировать вручную — генерируется автоматически.
- В CI использовать
yarn install --immutable(Yarn 2+; в Yarn 1 —--frozen-lockfile), чтобы не менять lock.
Аналоги
- npm —
package-lock.json. - pnpm —
pnpm-lock.yaml.
Коротко для собеседования
yarn.lock фиксирует точные версии всех зависимостей (прямых и вложенных) с хешами, обеспечивая детерминированную воспроизводимую установку у всех разработчиков и в CI/проде (в отличие от диапазонов в package.json). Коммитится в репозиторий, не редактируется вручную. Аналоги — package-lock.json (npm), pnpm-lock.yaml.