it-roy-ru.com

Диапазон Caret и package-lock.json: как получить с ними последние версии без взлома?

Я получил то, что означает package-lock.json, но я не понимаю, как работает диапазон каретки после добавления этого файла?

Скажем, у меня есть пакет (my-module), в котором я хочу, чтобы все новые неработающие версии не задавались вручную, без указания новых версий. Я устанавливаю последнюю версию, и это результат в файле package.json:

"my-module": "^4.1.1"

Однако package-lock.json также обновляется с исправлением версии my-module в 4.1.1.

В следующий раз выйдет новая версия my-module: 4.1.2. Запуск npm i будет не устанавливать его, так как версия в package-lock.json исправлена ​​к старой версии.

Вопрос

Как я могу добиться того, чтобы npm i загружал самую последнюю версию my-module без прерывания работы без постоянного создания нового файла package-lock.json? Этот файл только что сделал недействительным использование диапазона каретки?

7
atoth

Мы пришли к идее использования preinstall функциональности package.json.

Таким образом, в вашем файле package.json под тегом scripts вы добавляете: "preinstall": "npm update".

Поскольку npm update только обновляет пакеты, на которые влияет синтаксис диапазона каретки, вы можете иметь как package-lock.json, так и последние обновления.

3
atoth

Хотя я не люблю просто публиковать фрагменты документации verbatim, я чувствую, что это лучший источник, чтобы объяснить, почему то, что вы запрашиваете, именно то, что package-lock.json было разработано для НЕ ОБЯЗАТЕЛЬНО ДЕЛАЙТЕ:

  1. package-lock.json автоматически генерируется для любых операций, где npm изменяет либо node_modules tree, либо package.json

  2. Он описывает точное дерево, которое было сгенерировано, так что последующие установки могут генерировать идентичные деревья, независимо от промежуточных обновлений зависимостей.

Когда package.json передается в npm i, результатом операции является файловая система node_modules , соответствующая всем зависимостям, объявленным в package.json файле.

Эта операция НЕ ДАЕТ все время один и тот же результат: даже при использовании одного и того же файла package.json . И есть веская причина, почему npm i был разработан для этого, а именно:

  • Если новая версия пакета прямого semver-диапазона могла быть опубликована с момента последней установки ваших пакетов, и, следовательно, будет использоваться более новая версия.
2
Fernando Espinosa