Lock-файл

Lock-файл фиксирует точную версию каждой зависимости — прямой и транзитивной, — которую менеджер пакетов разрешил для проекта, обычно с хешем содержимого для каждой. Манифест говорит, что вы хотите («какой-нибудь релиз 4.x этой библиотеки»); lock-файл говорит, что вы получили, вплоть до транзитивной зависимости на шестом уровне, которую никто не выбирал осознанно. Его коммит в репозиторий и делает установку воспроизводимой: один и тот же коммит даёт одно и то же дерево зависимостей на ноутбуке, в CI и в продакшен-образе, вместо того чтобы каждый раз разрешаться заново и подхватывать всё, что успели опубликовать. У этой воспроизводимости три следствия, которые стоит назвать. Становится возможной отладка: «локально работает, в CI падает» перестаёт быть загадкой, когда доказуемо исполняется один и тот же код. Становится возможной проверка цепочки поставок: lock-файл — авторитетный список, который сканер сопоставляет с опубликованными уязвимостями, а записанные хеши обнаруживают пакет, чьё содержимое изменилось без смены версии. И обновления становятся осознанными: зависимости двигаются, когда кто-то запустил обновление и просмотрел диф, а не тихо при следующей сборке. К этому прилагаются две привычки. Используйте команду установки, которая строго следует lock-файлу и падает при расхождении, а не ту, что разрешает заново и переписывает: гарантию в CI даёт только строгая форма. И не давайте ему дрейфовать месяцами — необновляемый lock-файл копит известные уязвимости и однажды превращает рутинное обновление в крупное и рискованное.

Похожие термины

Ещё термины: Инструменты разработки