Вопрос проверяет понимание назначения package-lock.json и почему его нужно хранить в системе контроля версий для обеспечения воспроизводимости сборок.
Файл package-lock.json автоматически создается npm (или yarn) при установке зависимостей. В отличие от package.json, который указывает диапазоны версий (например, "express": "^4.18.0"), lock-файл фиксирует точные версии каждого установленного пакета, включая все транзитивные зависимости. Это обеспечивает детерминированность установки: на любой машине и в любой момент времени будет установлен один и тот же набор пакетов.
Если не коммитить этот файл, каждый раз при выполнении npm install npm будет вычислять зависимости заново. Из-за того, что авторы пакетов могут выпускать патчи (например, 4.18.1 вместо 4.18.0), разные разработчики могут получить разные версии. Это приводит к ситуации "на моей машине работает", когда баги проявляются только в определенных окружениях. Особенно опасно это в CI/CD, где сборка может внезапно сломаться из-за обновления минорной версии зависимости.
// package.json указывает диапазон
{
"dependencies": {
"lodash": "^4.17.0"
}
}
// package-lock.json фиксирует точную версию
{
"dependencies": {
"lodash": {
"version": "4.17.21",
"resolved": "...",
"integrity": "sha512-..."
}
}
}В этом примере package.json разрешает любую версию от 4.17.0 до 4.18.0 (с учетом semver). Lock-файл гарантирует, что будет установлена именно 4.17.21, даже если выйдет 4.17.22.
В package-lock.json также хранятся хеши (поле integrity), которые позволяют npm проверять, не был ли изменен пакет после публикации. Это защищает от атак типа "supply chain", когда злоумышленник подменяет пакет в реестре. Коммит lock-файла сохраняет эти хеши в истории, что повышает безопасность проекта.
Коммитить package-lock.json необходимо для обеспечения воспроизводимости сборок, предотвращения неожиданных ошибок из-за разницы версий и повышения безопасности цепочки поставок. Это стандартная практика для всех проектов, использующих npm или yarn.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию