Имеет ли смысл указывать в package.json конкретные (фиксированные) версии пакетов, если есть package-lock.json?

Как в случае с автором вопроса Для чего нужен package-lock.json?, от одного только чтения документации мне не стало ясно, зачем нужен package-lock.json. Несколько лет я просто тупо следовал рекомендации, что данный файл надо отслеживать с помощью системы контроля версий, но что касается организации версий устанавливаемых зависимостей, то я всегда ставил конкретные версии, а не диапазоны, например:

{
  "private": "true",
  "dependencies": {
    "@nestjs/common": "9.0.7",
    "@nestjs/core": "9.0.7",
    "@nestjs/platform-express": "9.0.7",
    "@nestjs/typeorm": "9.0.0"
  }
}

вместо

{
  "private": "true",
  "dependencies": {
    "@nestjs/common": "^9.0.7",
    "@nestjs/core": "^9.0.7",
    "@nestjs/platform-express": "^9.0.7",
    "@nestjs/typeorm": "^9.0.0"
  }
}

потому что так было как-то спокойнее, особенно при работе в команде.

Но всё-таки так не годится - надо понимать, что и зачем я делаю, а потому встаёт вопрос: имеет ли смысл в принимаемых мной мерах версионной безопасности (установка конкртных версий) , если суещствует package-lock.json?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Смысл в установке конкретных версий есть.

Т.к. из lock будет браться версия, только если сделать npm install, а если сделать npm update, то тогда обновится версия в npm.json и перезапишется новое значение в npm.lock

Также, вдруг, если нет SVN, то при потере lock и инсталяции ПО - будет браться уже версия, как если бы сделали npm update

Если случайно кто-то удалит npm.lock и сделает install/update опять же беспокоиться о том, что установится версия на самый крохотный минор - тоже не придётся.

Ещё бывает даже так, что самый минорный апдейт может поломать сайт. Да, вроде миноры, вроде фиксы, но (на собственном опыте было) даже, условно при апдейте версии с 2.2.1 на 2.2.2 - ломало всё.

Также, с учётом например текущей ситуации в мире, мы например зафиксировали все версии до 24 фервраля. Т.к после 24 февраля в некоторых репозиториях началась жесть (особенно в VUE где разраб одного из расширений внедрил код, который делал rm -rf в системе).

→ Ссылка