Многие думают, что package-lock.json уже дает воспроизводимые сборки. На практике
npm install может подтянуть новые версии из диапазонов ^ и ~, если кто-то запустит команду в неподходящий момент.Было:
{
"dependencies": {
"axios": "^1.7.9", // любой 1.x.x
"express": "~4.18.0", // только 4.18.x
"react": "^19.0.0" // любой 19.x.x
}
}Стало:
{
"dependencies": {
"axios": "1.7.9",
"express": "4.18.2",
"react": "19.0.0"
}
}Безопасность патчей
"А как же security updates?" Лучше получать их осознанно через PR, чем во время сборки. Автоматические обновления приносят не только фиксы, но и риски сломать проект.
Dependabot или Renovate создают pull request с обновлениями. Команда проверяет diff, прогоняет тесты, мерджит вручную.
Что делать
1. Убрать все
^ и ~ из package.json2. Зафиксировать точные версии (
npm i package@x.y.z)3. Настроить Dependabot/Renovate
4. Проверять все обновления тестами
Такая схема убирает магию из сборки. Проще дебажить релизы и ловить настоящие баги.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера