Какой смысл разрешать URL в package-lock.json?

Всякий раз, когда я генерирую файл блокировки пакета, также существует "разрешенный" блок, который выглядит следующим образом:

"resolved": "http://devel.npm.registry:4873/lodash/-/lodash-4.17.5.tgz"

Какой смысл этого URL? Позже, если я попытаюсь установить зависимости на основе этой блокировки пакетов, нужно ли мне использовать тот же реестр npm? Потому что мы используем другой реестр npm для локальной разработки и производственных сборок. Таким образом, когда я развиваюсь, я использую devel.npm.registry, но инструмент CI использует production.npm.registry, Согласно моим тестам, URL не имеет значения (я пытался npm@6.4.1). Но это текущая реализация, которая скоро изменится, или URL намеренно игнорируется? У меня такое ощущение, что некоторые из предыдущих версий npm действительно проверяли разрешенные URL-адреса.

Документация не очень полезна в этом случае.

2 ответа

Я нашел несколько статей в Интернете по этому вопросу. Перейдите по ссылкам:

npm использует JSON в качестве формата для файла блокировки. Хорошая новость заключается в том, что npm@5.0.0 игнорирует разрешенное поле в файле package-lock.json и в основном резервное поле, определенное в аргументе.npmrc или через аргумент --registry с использованием CLI, если он существует, в противном случае он будет используйте определенное в разрешенном поле.

https://medium.com/verdaccio/verdaccio-and-deterministic-lock-files-5339d82d611e


Еще один день, еще один твит о #npm5 вкусностях.

Теперь npm не знает, какой реестр вы использовали для создания пакета-lock.json.

https://twitter.com/maybekatz/status/862834964932435969


Цель разрешения в package-lock.json - обойти этап разрешения зависимостей (выборки метаданных), когда вы пропускаете пакеты. честность, чтобы убедиться, что вы получаете то же самое. Без разрешенного поля не кэшированные установки могут прерваться из-за изменений метаданных, и они также будут значительно медленнее, потому что мы должны сделать полную выборку метаданных, прежде чем мы сможем что-либо скачать.

Обратите внимание, что package-lock.json не позволяет извлекать разные пакеты из разных реестров. Даже если у вас есть блокировка пакетов с разными пакетами, использующими разные разрешенные поля, все пакеты всегда будут извлекаться из того, что есть в вашем текущем параметре реестра = в npmrc. разрешенные поля, которые не соответствуют настроенному реестру, будут проходить через (более медленную) выборку метаданных, о которой я упоминал выше, но все равно будут выбираться только из текущего реестра.

https://github.com/npm/npm/issues/16849

Попробуйте преобразоватьpackage-lock.jsonвnpm-shrinkwrap.jsonсnpm shrinkwrap, который сохранит зависимости пакетов, но удалит атрибуты «разрешено» и «целостность», что вызывает проблемы в перекрестных средах npm.

Другие вопросы по тегам