Зачем нужен lock-файл (package-lock.json, pnpm-lock.yaml) и чем npm install отличается от npm ci?
- Нужно ли коммитить 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 минут бесплатно.