2015-12-18 3 views
0

В нашей компании у нас есть локальный Sonatype Nexus, который мы используем для кеширования Npm, Maven, Nuget и т. Д. Он настроен как прокси для публичных репозиториев и имеет все кэшированные узлы node_modules. Тем не менее, модули npm сами по себе извлекают другие артефакты из Интернета, и это может вызвать проблемы, поскольку мы хотим иметь все, что требуется для сборки под нашим контролем.Сделать работу по установке npm без подключения к Интернету

Например, если мы сокращаем подключение к серверам интернет мы получаем эти ошибки во время установки НПМ:

06:57:49 D:\jenkins\workspace\AnxNT.Archetype\Web>npm install 
06:58:05 npm WARN install Couldn't install optional dependency: Unsupported 
07:00:31 npm ERR! fetch failed https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz 
07:00:31 npm WARN retry will retry, error on last attempt: Error: connect ETIMEDOUT 192.30.252.131:443 
07:02:55 npm ERR! fetch failed https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz 
07:02:55 npm WARN retry will retry, error on last attempt: Error: connect ETIMEDOUT 192.30.252.131:443 
07:06:08 npm ERR! fetch failed https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz 
07:06:08 npm ERR! Windows_NT 6.3.9600 

Есть ли вообще решить эту проблему? Помощь и советы получили высокую оценку.

+0

Вы знаете, что вы можете заблокировать версии, используемые в файле package.json, так что вы всегда строить против тех же внешних зависимостей, верно? Это недостаточный контроль над сборкой? –

+2

См.: Https://www.npmjs.com/package/offline-npm –

+0

@JohnZwinck Вы имеете в виду использование обрезки с использованием npm? Это хорошо, но мы все еще зависим от того, что артефакт существует на внешнем сервере, который не является устойчивым решением. Мы хотим иметь доступ ко всем необходимым артефактам «в доме». – P3anuts

ответ

1

Такой вид выхода за пределы реестра - это неудовлетворительность системы НПМ и проверка пакетов.

Есть только два варианта. Оба из них трудно реализовать.

  1. Вы можете перехватить все внешние URL-вызовы и переписать их на эквивалентные локальные ресурсы. Проблема, конечно же, в том, что их потенциально много, и они тоже меняются.

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

К сожалению, нет ничего лучше, о чем я могу думать. Насколько мне известно, никаких других реальных решений не существует.

Дальнейшие советы также доступны в Sonatype support site.

Смежные вопросы