npm 3.10.10 ошибка установки сокета зависания


Я использую Node 6.10.1 и npm 3.10.10 на Dell XPS 15 под управлением Ubuntu 16.04 с ядром 4.13.0.0-36-generic. Я стою за корпоративным прокси, который настроен через cntlm .

Когда я запускаю npm install -d в проекте, он работает с короткого времени, и через некоторое время я получаю Error: socket hang up.

Я нашел множество вопросов о моей проблеме, но ни одно решение, казалось, не работало.

Вот выдержка из npm config list:

; cli configs
user-agent = "npm/3.10.10 node/v6.10.1 linux x64"

; userconfig /home/msb/.npmrc
https-proxy = "http://localhost:3128/"
registry = "http://urlTocorporateRegistryWhichWorksOnOtherComputers"
strict-ssl = false

; node bin location = /home/msb/.nvm/versions/node/v6.10.1/bin/node
; cwd = /home/msb
; HOME = /home/msb
; "npm config ls -l" to show all defaults.

Я не могу изменить реестр, так как мы используем некоторые внутренние модули, и я должен сохранить текущие версии node/npm.

Я уже пробовал :

  • использование прокси непосредственно в конфигурации npm, а не через cntlm
  • ограничение моих возможностей загрузки / выгрузки с помощью trickle через команду trickle -s -d 100 -u 100 npm install -d

Еще одно указание : он работает наWindows , и у меня есть коллега, работающийUbuntu 17.04 на более медленном ПК, и он работает для него. Мы думаем, что мой машина может быть слишком грубой, когда запрашивает реестр. Кто-нибудь знает способ замедления запросов npm ?

Раньше он работал через пряжу, но некоторые новые разработки заставили меня вернуться в НПМ.

Кто-нибудь сталкивался с этой проблемой и исправлял ее ?

Спасибо за вашу помощь.
1 3

1 ответ:

Я экспериментировал с той же проблемой, без видимой причины, на Ubuntu 18.04.

Я, наконец, использовал docker с привязкой креплений, чтобы решить эту проблему. Эти шаги следующие:

  • Создайте файл dockerfile со следующими элементами (вы также можете напрямую запустить используемый образ, Если вам не нужно настраивать прокси, как я)

    FROM node:6.10.1
    
    ENV HTTPS_PROXY "http://yourproxy:yourport/"
    
    # Different RUN commands to configure npm and git corporate proxy
    
    WORKDIR /home/root/
    
  • Создайте образ (из папки dockerfile): docker image build -f npm-installer/Dockerfile -t custom-npm-installer .

  • зайдите в папку проекта, где вы обычно run npm install
  • выполните следующую команду для интерактивного запуска контейнера: docker container run -it --network host -v </host/path/to/pj>:/home/root/pj-to-install --name custom-npm-installer custom-npm-installer bash
Теперь вы можете запустить команду npm install из контейнера. Однако будьте осторожны, вам придется использовать chmod в папке node_modules рекурсивно, так как контейнер по умолчанию использует root.

Другое дело, если вы используете node-sass, он большую часть времени компилируется на лету при установке npm и соответствует текущей версии/архитектуре вашей ОС. Так что если ваш linux дистрибутив не совсем такой же, как у контейнера, вам может потребоваться перекомпилировать node-sass на вашем хосте после запуска npm install на контейнере. Не беспокойтесь, node-sass даст вам команду для запуска в тот момент, когда вы запустите приложение.