Ответ вслух Junior Пакеты и зависимости обновлено

Зачем нужен lock-файл

Вопрос

Объясни, зачем нужен package-lock.json, если версии уже указаны в package.json.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В package.json обычно стоят диапазоны вроде ^1.6.2, то есть «любая 1.x не ниже». К тому же это только прямые зависимости, а у каждой своё дерево.

Что должно прозвучать в ответе

  • в package.json диапазоны (^, ~), а не точные версии

  • lock фиксирует точные версии всего дерева, включая транзитивные

  • хранит хеши целостности пакетов

  • его коммитят, установка воспроизводима у всех и в CI

  • npm ci ставит строго по lock и падает при расхождении

  • обновление зависимостей это осознанный коммит с изменённым lock

Что могут спросить следом

  • Что будет, если удалить lock и переустановить?
  • Чем npm ci отличается от npm install?
  • Как безопасно обновлять зависимости?

Разбор

В package.json обычно стоят диапазоны вроде ^1.6.2, то есть «любая 1.x не ниже». К тому же это только прямые зависимости, а у каждой своё дерево. Если ставить без lock-файла, через неделю приедут другие версии где-то в глубине дерева, и баг будет только у части команды или только в CI.

Lock-файл фиксирует точные версии всего дерева и хеши целостности. Его коммитят, и тогда у всех одинаковый node_modules. В CI и Docker ставят через npm ci: он берёт версии строго из lock-файла и падает, если тот не совпадает с package.json. Обновление зависимостей становится отдельным осознанным изменением: правим версии, получаем новый lock, прогоняем тесты, ревьюим.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.