Что происходит с npm i и файлом блокировки пакета? - PullRequest
0 голосов
/ 18 июня 2020

Мне кажется, я понимаю, как работает npm i, используя файл package.json с dependencies и версиями этих библиотек. Насколько я понимаю, package-lock.json - это результат этой сборки с указанными c версиями вниз по дереву. В будущем npm i будет использовать версии, указанные в этом файле блокировки. Отлично!

Моя текущая проблема - когда мы удаляем файл package-lock.json, npm i извлекает последнюю версию библиотек, игнорирует версию, указанную в package.json! Зачем ему это делать?

У нас есть несколько библиотек, на которых он это делал, но одна, которая нанесла ущерб havo c в наших новых сборках, это: "react-lazyload": "^2.6.2",. Когда файл блокировки удаляется, он загружает 2.6.8, что вносит критические изменения в наш интерфейс. Зачем npm брать последнюю версию?

Я проверил файл блокировки, и это единственный экземпляр во всех библиотеках, который его использует, никакая другая библиотека не запрашивает новую версию.

Кстати , это, кажется, происходит только на нашем сервере Jenkins, где развернут весь наш код, который работает под той же версией Node / npm, что и наши машины разработчика:

node -v
v10.16.3
npm -v
6.9.0

1 Ответ

2 голосов
/ 18 июня 2020

Он не игнорирует версию в пакете. json он просто следует semanti c правилам управления версиями.

Если вы используете "react-lazyload": "^2.6.2", это означает, что npm загрузит версию 2.XX пакета, получив последний второстепенный выпуск (второй номер) и последний патч (третий номер).

Если вы используете "react-lazyload": "~2.6.2", он загрузит версию 2.6.X пакета, получив только последний патч (третье число).

Если вы используете "react-lazyload": "2.6.2", всегда будет загружаться версия 2.6.2

...