Какой смысл разрешать 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. разрешенные поля, которые не соответствуют настроенному реестру, будут проходить через (более медленную) выборку метаданных, о которой я упоминал выше, но все равно будут выбираться только из текущего реестра.
Попробуйте преобразоватьpackage-lock.json
вnpm-shrinkwrap.json
сnpm shrinkwrap
, который сохранит зависимости пакетов, но удалит атрибуты «разрешено» и «целостность», что вызывает проблемы в перекрестных средах npm.