Есть ли способ заставить npm install (команду) работать за прокси?

266

Прочитайте о прокси-переменной в .npmrcфайле, но она не работает. Попытка избежать загрузки вручную всех необходимых пакетов и установки.

Бен
источник

Ответы:

343

Я решил эту проблему следующим образом:

  1. Я запускаю эту команду:

    npm config set strict-ssl false
  2. Затем установите npm для работы с http вместо https:

    npm config set registry "http://registry.npmjs.org/"
  3. Затем я устанавливаю пакеты, используя этот синтаксис:

    npm --proxy http://username:password@cacheaddress.com.br:80 install packagename

Пропустить username:password часть, если прокси не требует от вас аутентификации

РЕДАКТИРОВАТЬ: мой друг только что отметил, что вы можете заставить NPM работать за прокси, установив ОБА переменные среды HTTP_PROXY и HTTPS_PROXY, а затем обычно выполняя команду npm install express (например)

РЕДАКТИРОВАТЬ 2: Как прокомментировал @BStruthers, имейте в виду, что пароли, содержащие "@", не будут анализироваться правильно, если в нем содержится @, то весь пароль следует заключать в кавычки

Ренато Гама
источник
7
Заголовок, если ваш пароль содержит "@", npm не сможет правильно проанализировать ваши настройки прокси. Возможный обходной путь - ввести поддельное имя пользователя: пароль в конфигурации npm и использовать локальный прокси-сервер (например, fiddler), чтобы изменить заголовок Proxy-Authorization запроса, чтобы иметь правильное имя пользователя: пароль. Имейте в виду, что имя пользователя: пароль, хранящийся в Proxy-Authorization, закодировано в base64.
BStruthers
14
Если ваш пароль содержит символ @, вы можете передать его, указав свое имя пользователя и пароль в кавычках.
Абсент мыслящий веб-кузнец
9
В вашем пароле могут быть специальные символы, но они должны быть закодированы в URL. Так что, если ваш пароль был my@password, ваш файл .npmrc должен иметь my%40passwordдля парольной части. Помещение в кавычки работает в некоторых случаях, но кодирование является надежным.
Крис Джейнс
1
Еще одна ошибка! Если у вас есть ранее установленные системные переменные HTTP-PROXY, убедитесь, что вы их очистили!
Сидвелл
1
Вы легенда! Я перестал пытаться заставить npm работать на работе, но это, наконец, решило проблему.
tamj0rd2
308

Настройка npmпрокси

Для HTTP :

npm config set proxy http://proxy_host:port

ДляHTTPS :

используйте адрес прокси https, если он есть

npm config set https-proxy https://proxy.company.com:8080

еще повторно использовать адрес прокси http

npm config set https-proxy http://proxy.company.com:8080

Примечание : https-прокси не имеет httpsв качестве протокола, но http.

jithesh
источник
9
Нет поддержки SOCKS?
грм
57
Обратите внимание, что https-прокси не имеет «https» в качестве протокола, но «http». Изменение этого решило проблему для меня.
Петерхил
3
@peterhil Спасибо за этот совет. Это безумие, но я потратил часы, чтобы решить эту проблему с помощью «https». Есть идеи, почему это так работает?
Маной Н.В.
2
@ManojNV, соединение с прокси-сервером не зашифровано. Это не говорит HTTPS с прокси-сервером, просто HTTP. Полезная нагрузка - это SSL между клиентом и сервером назначения. Если бы это был HTTPS к прокси-серверу, то все было бы зашифровано / расшифровано дважды.
Джейми
1
Тонкий. Большое спасибо @peterhil
Алек Бретон
104

Если вы сомневаетесь, попробуйте все эти команды, как я:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080

npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install

=======

ОБНОВИТЬ

Вставьте свои настройки в ~/.bashrcили~/.bash_profile около того, чтобы вам не пришлось беспокоиться о своих настройках каждый раз, когда вы открываете новое окно терминала!

Если ваша компания похожа на мою, мне приходится часто менять свой пароль. Поэтому я добавил следующее в мой ~ / .bashrc или ~ / .bash_profile, чтобы каждый раз, когда я открывал терминал, я знал, что мой npm актуален!

  1. Просто вставьте следующий код внизу вашего ~/.bashrcфайла:

    ######################
    # User Variables (Edit These!)
    ######################
    username="myusername"
    password="mypassword"
    proxy="mycompany:8080"
    
    ######################
    # Environement Variables
    # (npm does use these variables, and they are vital to lots of applications)
    ######################
    export HTTPS_PROXY="http://$username:$password@$proxy"
    export HTTP_PROXY="http://$username:$password@$proxy"
    export http_proxy="http://$username:$password@$proxy"
    export https_proxy="http://$username:$password@$proxy"
    export all_proxy="http://$username:$password@$proxy"
    export ftp_proxy="http://$username:$password@$proxy"
    export dns_proxy="http://$username:$password@$proxy"
    export rsync_proxy="http://$username:$password@$proxy"
    export no_proxy="127.0.0.10/8, localhost, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16"
    
    ######################
    # npm Settings
    ######################
    npm config set registry http://registry.npmjs.org/
    npm config set proxy "http://$username:$password@$proxy"
    npm config set https-proxy "http://$username:$password@$proxy"
    npm config set strict-ssl false
    echo "registry=http://registry.npmjs.org/" > ~/.npmrc
    echo "proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "strict-ssl=false" >> ~/.npmrc
    echo "http-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "http_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    
    ######################
    # WGET SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "https_proxy = http://$username:$password@$proxy/" > ~/.wgetrc
    echo "http_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "ftp_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "use_proxy = on" >> ~/.wgetrc
    
    ######################
    # CURL SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "proxy=http://$username:$password@$proxy" > ~/.curlrc
  2. Затем отредактируйте поля «username», «password» и «proxy» в вставленном вами коде.

  3. Откройте новый терминал

  4. Проверьте ваши настройки, запустив npm config listиcat ~/.npmrc

  5. Попробуйте установить свой модуль, используя

    • npm install __, или
    • npm --without-ssl --insecure install __, или
    • переопределить настройки прокси с помощью npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __ .
    • Если вы хотите, чтобы модуль был доступен глобально, добавьте опцию -g
Кэти
источник
3
Последняя команда работала на меня. Все те, что до этого не удалось
foecum
3
я прочитал около 50 ответов, касающихся этой конфигурации прокси проклятого ... единственное, что сработало, был ваш ответ ... спасибо !!!
Лоренцо
4
Спасибо, парни!! Рад, что это работает! Это было огромной головной болью на работе, поэтому я рад, что могу помочь другим: P
Кэти
2
+1. Это работает. Я - команд npm config set registry http://registry.npmjs.org/, npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set strict-ssl falseдля НОЙ конфигурации и затем устанавливаются пакет NPM , используя npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}. Спасибо
Атур
1
После трех дней попыток это решение сработало для меня.
Мохан Сингх
33

Вы пробовали параметры командной строки вместо .npmrcфайла?

Я думаю, что-то вроде npm --proxy http://proxy-server:8080/ install {package-name}сработало для меня.

Я также видел следующее: npm config set proxy http://proxy-server:8080/

Бен Хамфрис
источник
+1 Я попробовал другие, это был тот, который работал для меня. с авторской частью от Ренато Гамы
winner_joiner
20

Хотя уже есть много полезных советов, для моей среды (Windows 7, использующей PowerShell) и последней доступной версии node.js (v8.1.2) все вышеперечисленное не сработало, за исключением случаев, когда я следовал настройкам brunowego .

Поэтому проверьте ваши настройки с помощью:

npm config list

Настройки за прокси:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy http://username:password@ip:port
npm config set https-proxy http://username:password@ip:port
npm config set proxy http://username:password@ip:port
npm set strict-ssl false

Надеюсь, это сэкономит время кому-то

Кармин Тамбаския
источник
как мне найти мой адрес прокси?
Робин,
@Robin В одном случае, при использовании Windows, IE хранит их. Вы можете зайти в IE и просмотреть настройки локальной сети под подключением, и он покажет это там.
eaglei22
@Robin, конечно, зависит от браузера, но обычно находится в настройках
Carmine Tambascia
@Robin в настройках браузера вы должны увидеть / проверить настройки прокси. Обычно есть файл с .pac, где должно быть последнее значение: PROXY YourProxyAdress: PORT
Carmine Tambascia
17

Это работает для меня в Windows:

npm config set proxy http://domain%5Cuser:pass@host:port

Если вы не находитесь ни в каком домене, используйте:

npm config set proxy http://user:pass@host:port

Если ваш пароль содержит специальные символы , такие как ", @, :и так далее, заменить их по URL закодированных значений. Например "-> %22, @-> %40, :-> %3A. %5Cиспользуется для персонажа \.

Максимус
источник
6
Спасибо за совет, это сработало для меня. Вы можете открыть консоль javascript с помощью ctrl + shift + j и набрать, encodeURIComponent("YourP@ssword")чтобы получить зашифрованную версию вашего пароля.
Jaggedsoft
15

Для настройки http-прокси установите флаг -g :

sudo npm config set proxy http://proxy_host:port -g

Для https прокси, снова убедитесь, что установлен флаг -g :

sudo npm config set https-proxy http://proxy_host:port -g

Андрей
источник
в чем смысл -g?
Дэвид
1
настраивает глобально, а не для локальной установки
Андрей
8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
Шаран Раджендран
источник
1
Добавьте несколько комментариев, пожалуйста.
Макс
8

Это сработало для меня

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false
Абхишек Хандаит
источник
7

vim ~/.npmrcв вашей машине Linux и добавьте следующее. Не забудьте добавить registryдеталь, так как это во многих случаях приводит к сбою.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
Абхишек Двиведи
источник
2
Многие прокси поддерживают туннелирование запросов https, но они не будут обрабатывать соединение https с самим собой. Таким образом, при возникновении проблем попробуйте изменить https-proxy=https://..наhttps-proxy=http://..
YoYo
7

Наконец, мне удалось решить эту проблему, используя прокси-сервер behinde с аутентификацией AD. Я должен был выполнить:

npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/

Очень важно, чтобы URL кодировал любые специальные символы, такие как backshlash или # В моем случае мне пришлось кодировать

  1. backshlashс% 5C так и domain\user willбудетdomain%5Cuser
  2. #войдите с %23%0Aтаким паролем, как Password#2будетPassword%23%0A2

Я также добавил следующие настройки:

npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/
Александр Биллевич
источник
6

Хотя я установил прокси с помощью конфигурации, проблема не была решена, но после этого у меня сработало:

npm --https-proxy http://XX.AA.AA.BB:8080 установить Cordova-плагины

npm --proxy http://XX.AA.AA.BB:8080 установить

Шридхар Г.С.
источник
Эта работа для меня, никаких других изменений. Откройте командное окно и используйте выше, и это будет работать
AKS
6

Я перепробовал все эти варианты, но у моего прокси-сервера по какой-то причине его не было. Затем, родившись из отчаяния / отчаяния, я случайно попробовалcurl в своей оболочке Git Bash, и это сработало.

Отключение всех параметров прокси с помощью

npm config rm proxy
npm config rm https-proxy

И тогда запуск npm installв моей оболочке Git Bash работал отлично. Я не знаю, как он настроен правильно для прокси, а cmdприглашение Windows - нет, но это сработало.

Эван Ноулз
источник
6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

Это решило мою проблему.

Венугопал
источник
Важнейшей вещью было изменить ссылку на реестр: вместо https, которую я имел до http ссылки.
Алекс Файнштейн
6

Наконец, после привязки разных ответов, первые четыре строки @Kayvar answers помогают мне решить проблему:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
Мухаммед Файзан Хан
источник
5

Попробуйте найти .npmrc в C: \ Users \ .npmrc

затем откройте (блокнот), напишите и сохраните внутри:

proxy=http://<username>:<pass>@<proxyhost>:<port>

PS: удалите "<" и ">", пожалуйста!

Игорь Бофилс
источник
5

Для меня, хотя python и т. Д. Все будет работать, хотя наш корпоративный прокси-сервер npm не будет.

Я попытался

npm config set proxy http://proxyccc.xxx.ca:8080 npm config set https-proxy https://proxyccc.xxx.ca:8080 npm config set registry http://registry.npmjs.org/

в соответствии с инструкциями, но продолжал получать ту же ошибку.

Только когда я удалил https-proxy https://proxyccc.xxx.ca:8080 файл .npmrc, npm установил электрон - save-dev сработал

Ник Фланаган
источник
1
Ваш https-proxy, вероятно, нет https:. По крайней мере, иметь один и тот же порт для каждого из них, вероятно, не правильно, но я думаю, что они оба имеют одинаковое значение.
toddkaufmann
5

В системе Windows

Попробуйте удалить параметры прокси и реестра (если они уже установлены) и установить переменные среды в командной строке с помощью

SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port

затем попробуйте запустить npm install. Таким образом, вы не будете устанавливать прокси в .npmrc, но для этого сеанса он будет работать.

SoSufi
источник
Это сработало для меня. Символ равенства - это то, что, казалось, заставило все это работать. До этого я просто использовал, SET HTTP_PROXY http://username:password@domain:portно переключился на, SET HTTP_PROXY=http://username:password@domain:portказалось, чтобы все
заработало
4

Используйте команду ниже в cmd или GIT Bash или другом приглашении

$ npm config set proxy " http://192.168.1.101:4128 "

$ npm config set https-proxy " http://192.168.1.101:4128 "

где 192.168.1.101 - ip прокси, а 4128 - порт. изменить в соответствии с настройками прокси. это работает для меня.

Панкай
источник
1
Я использовал домен для аутентификации и использовал обратную косую черту: с этой строкой% 5C. Наконец-то это сработало!
Франческо
4

Многие приложения (например, npm) могут использовать настройку прокси из переменных среды пользователя.

Вы можете просто добавить в свою среду следующие переменные HTTP_PROXY и HTTPS_PROXY которые будут иметь одинаковое значение для каждой

HTTP: // пользователь: пароль @ ProxyAddress: ProxyPort

Например, если у вас Windows, вы можете добавить прокси следующим образом:

Как это выглядит на Windows

Дмитрий Мельничук
источник
4

В моем случае я забыл установить «http: //» в моих конфигурационных файлах (их можно найти в C: \ Users \ [USERNAME] \ .npmrc) адреса прокси. Так что вместо того, чтобы

proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]

я имел

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]

Что, конечно, не сработало, но сообщения об ошибках тоже не сильно помогли ...

Acroneos
источник
4

На этот вопрос было много ответов выше, но ни один из них не помог мне. Все они упомянуты, чтобы добавитьhttp:// префикс. Я тоже добавил это. Все не удалось.

Это наконец работает после того, как я случайно удалил http://префикс. Конечный конфиг выглядит так:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy ip:port
npm config set https-proxy ip:port
npm config set proxy ip:port
npm set strict-ssl false

Я не знаю логики этого, но это сработало. Если ни один из приведенных выше ответов не работает для вас, возможно, вы можете попробовать этот способ. Надеюсь, что это полезно.

SkuraZZ
источник
4

На странице curl есть хорошая информация о проблемах с SSL и сертификатами . Я основываю большую часть своего ответа на информации там.

Использование strict-ssl false - плохая практика и может создавать проблемы. Вместо этого мы можем добавить сертификат, который вводится сертификатом «человек посередине».

Как решить это на Windows:

  1. Загрузите сертификаты CA от curl на основе пакета CA Mozilla. Вы также можете использовать скрипт оболочки «firefox-db2pem.sh» для преобразования вашей локальной базы данных Firefox.
  2. Перейдите на веб-страницу с помощью https, например Stackoverflow в Chrome или Internet Explorer.
  3. Нажмите значок замка, нажмите «Просмотреть сертификаты» или «Действительный» в Chrome.
  4. Перейдите к пути сертификации. Верхний сертификат или корневой сертификат - это тот, который мы хотим извлечь. Нажмите на этот сертификат, а затем «просмотреть сертификат»
  5. Нажмите на вторую вкладку «Детали». Нажмите «Копировать в файл». Выберите формат DER и запишите, где вы сохранили файл. Выберите подходящее имя файла, например rootcert.cer
  6. Если у вас установлен Git, у вас будет openssl.exe. В противном случае установите git для windows на этом этапе. Скорее всего, исполняемый файл openssl будет находиться в C: \ Program Files \ git \ usr \ bin \ openssl.exe. Мы будем использовать openssl для преобразования файла в формат PEM, необходимый для понимания NPM.
  7. Преобразуйте файл, сохраненный на шаге 5, с помощью этой команды:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    где rootcert - имя файла сертификата, сохраненного на шаге 5.
  8. Откройте outcert.pem в текстовом редакторе, достаточно умном, чтобы понимать окончания строк, поэтому не блокнот. Выделите весь текст и скопируйте его в буфер обмена.
  9. Теперь мы вставим этот контент в конец пакета CA Cert, созданного на шаге 1. Так что откройте cacert.pem в вашем расширенном текстовом редакторе. Перейдите в конец файла и вставьте содержимое предыдущего шага в конец файла. (Сохраните пустую строку под тем, что вы только что вставили)
  10. Скопируйте сохраненный файл cabundle.pem в подходящее место. Например, ваш% userprofile% или ~. Запишите местоположение файла.
  11. Теперь мы скажем npm / yarn использовать новый пакет. В командной строке напишите
    npm config set cafile **C:\Users\username\cacert.pem
    где C: \ Users \ username \ cacert.pem - это путь из шага 10.
  12. По желанию: включите Strong-SSL снова, npm config set strict-ssl true

Уф! Мы сделали это! Теперь npm может понять, как подключиться. Бонус в том, что вы можете указать curl использовать тот же cabundle.pem, и он также будет понимать HTTP.

сюр
источник
3

Вот шаги, которые я выполнил (Windows):

  1. Отредактируйте следующий файл C:\Users\<WIN_USERNAME>\.npmrc
  2. Экспортируйте сертификат в свою файловую систему со следующего адреса: https://registry.npmjs.org

  3. Перейдите в расположение экспортированного сертификата и введите следующую команду:

    npm config set cafile npm_certificate.cer

  4. Добавьте следующие изменения в файл: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Теперь вы должны быть готовы к работе!

Marco
источник
2

Моя проблема сводилась к глупой ошибке с моей стороны. Поскольку однажды я быстро поместил свои прокси в файл Windows * .bat (http_proxy, https_proxy и ftp_proxy), я забыл экранировать специальные символы для домена \ user (% 5C) в кодированном URL-адресе и пароль, имеющий знак вопроса '?' (% 3F). То есть, получив кодированную команду, не забывайте экранировать «%» в команде bat-файла.

Я изменился

set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080

в

set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080

Может быть, это крайний случай, но, надеюсь, это кому-нибудь поможет.

Брэндон Сорен Калли
источник
1

когда я даю без префикса http / http в настройках прокси, npm не работает, даже когда хост и порт прокси имеют правильные значения. Работало только после добавления префикса протокола.

Говинд Авиредди
источник
0

Просто откройте новый терминал и введите npm config editи npm config -g edit. Сброс к значениям по умолчанию. После этого закройте терминал, откройте новый и введите, npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>если вам нужно глобально, просто добавьте -g.

Это сработало для меня, надеюсь, это сработает для вас :)

rufatZZ
источник