Чи є спосіб змусити 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частину, якщо проксі не вимагає від вас автентифікації

EDIT: Мій друг просто вказав, що ви можете отримати ву роботу за проксі, встановивши ОБИДВА HTTP_PROXY і https_proxy змінних оточень, а потім видавати зазвичай команду ного встановити експрес (наприклад)

EDIT2: Як прокоментував @BStruthers, майте на увазі, що паролі, що містять "@", не будуть правильно проаналізовані, якщо містить @ поставити весь пароль у лапки


7
Якщо ваш пароль містить "@" npm, не буде правильно проаналізовано налаштування проксі-сервера. Потенційне рішення полягає в тому, щоб поставити помилкове ім'я користувача: пароль у npm-конфігурацію та використовувати локальний проксі (наприклад, fiddler), щоб змінити заголовок проксі-авторизації запиту, щоб мати правильне ім’я користувача: пароль. Майте на увазі, що ім'я користувача: пароль, збережений у проксі-авторизації, закодовано 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.


9
Немає підтримки SOCKS?
грм

57
Зауважте, що у https-проксі немає протоколу "https", а "http". Зміни цього вирішили проблему для мене.
peterhil

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. Потім відредагуйте поля "ім'я користувача", "пароль" та "проксі" в коді, який ви вставили.

  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 я спробував інших, це був той, який працював на мене. з
авторською

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

@ Робін звичайно залежить від браузера, але, як правило, під налаштуваннями
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

Для налаштування проксі-сервера встановіть прапор -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://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

Нарешті мені вдалося вирішити цю проблему, будучи проксі-сервером з аутентифікацією AD. Мені довелося виконати:

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

Дуже важливо кодувати URL будь-якими спеціальними символами, такими як зворотний кут або # У моєму випадку мені довелося кодувати

  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 встановити шнури-плагіни

npm --проксі 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 допомагають мені вирішити питання:

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 install electron --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, але для цього сеансу він буде працювати.


Це працювало для мене. Символ рівності - це те, що, здавалося, змусило його працювати. До цього я просто використовував, 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:2128 "

$ npm набір конфігурацій https-proxy " http://192.168.1.101:2128 "

де 192.168.1.101 - проксі ip, а 4128 - порт. змінити відповідно до налаштувань проксі-сервера. це працює для мене.


1
Мені довелося використовувати домен для автентифікації, і я використав ухилений зворотний проріз: з цією рядком% 5C. Це спрацювало нарешті!
Франческо

4

Багато програм (наприклад, npm) можуть використовувати налаштування проксі від змінних середовища користувача.

Ви можете просто додати до свого середовища наступні змінні HTTP_PROXY та HTTPS_PROXY, які матимуть однакове значення для кожної

http: // user: password @ 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]

Що, звичайно, не спрацювало, але повідомлення про помилки теж не дуже допомогло ...


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

Я не знаю логіки за цим, але це спрацювало. Якщо жодна з наведених вище відповідей не працює для вас, можливо, ви можете спробувати на цьому шляху. Сподіваюся, що ця корисна.


4

На сторінці curl про SSL та питання сертифікатів є гарна інформація . Більшу частину своєї відповіді я базую на інформації, що там є.

Використання false-sll false є поганою практикою і може створювати проблеми. Що ми можемо зробити замість цього - додати сертифікат, який вводиться, сертифікатом "людина в середині".

Як вирішити це в Windows:

  1. Завантажте сертифікати CA із завитка на основі пакета CA Mozilla. Ви також можете використовувати оболонку "firefox-db2pem.sh" curl для перетворення локальної бази даних 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 / пряжу використовувати новий комплект. У командному рядку напишіть,
    npm config set cafile **C:\Users\username\cacert.pem
    де C: \ Users \ username \ cacert.pem - шлях від кроку 10.
  12. За бажанням: знову ввімкніть строгий 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

Тепер ви повинні бути готові до поїздки!


2

Моє питання зійшло з дурною помилкою з мого боку. Оскільки я одного разу швидко перекинув проксі-файли у файл Windows * .bat (http_proxy, https_proxy та ftp_proxy), я забув уникати спеціальних символів для кодованого URL-адресом домену \ користувач (% 5C) та пароля з позначкою питання. '?' (% 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.

Це працювало для мене, сподіваюся, це буде працювати для вас :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.