Зачем нужен lock-файл
Вопрос
Объясни, зачем нужен package-lock.json, если версии уже указаны в package.json.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
в 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 ошибок.