Вопрос с собеседования · Frontend

Зачем нужен lock-файл (package-lock.json, pnpm-lock.yaml) и чем npm install отличается от npm ci?

JuniorВыкатка и эксплуатация
Ещё спрашивают так:
  • Нужно ли коммитить package-lock.json?
Коротко

package.json задаёт диапазоны версий (^1.2.0), а lock-файл фиксирует точные версии всего дерева зависимостей — у всех разработчиков и в CI ставится одно и то же. Lock-файл коммитят. npm install может обновить lock в рамках диапазонов; npm ci ставит строго по lock и падает при расхождении — его используют в CI. pnpm экономит место общим хранилищем и строже к неявным зависимостям; Yarn — альтернатива с похожими возможностями.

  • Один пакетный менеджер на проект — не смешивать lock-файлы
  • node_modules не коммитят
  • npm audit — проверка известных уязвимостей

Подробно

Без lock-файла в понедельник и пятницу могут поставиться разные версии транзитивной зависимости — и сборка «вдруг» сломается.

Что хотят услышать

  • Диапазоны против точных версий.
  • Коммитить lock-файл.
  • npm ci в CI.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Lock-файл не коммитят, он генерируется у каждого разработчика свой при установке пакетов
  • ✓Фиксирует точные версии всего дерева и коммитится; npm ci ставит строго по нему
  • ✗node_modules нужно коммитить вместо lock-файла
  • ✗npm ci обновляет зависимости до последних версий

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования