Как установить NPM за прокси-сервером аутентификации в Windows?


30

Мне нужно запустить последнюю версию Node и NPM в Windows. Я установил Node 0.5.8 и загрузил исходники NPM с GitHub. Шаги, которые я выполнил для установки NPM, были перечислены на его сайте GitHub, но у меня проблема с запуском следующей команды:

node cli.js install npm -gf

но это терпит неудачу со следующим сообщением об ошибке:

Error: connect UNKNOWN
at errnoException (net_uv.js:566:11)
at Object.afterConnect [as oncomplete] (net_uv.js:557:18)

System Windows_NT 5.1.2600
command "...\\Node\\bin\\node.exe" "...\\npm\\cli.js" "install" "npm" "-gf"
cwd ...\npm
node -v v0.5.8
npm -v 1.0.94
code UNKNOWN

Я думаю, что это проблема, потому что мне нужна аутентификация на моем прокси для подключения к Интернету. Но я не нашел способа сказать установщику использовать мои учетные данные для входа в систему. Есть ли возможность предоставить мой IP-адрес прокси-сервера и информацию для входа в систему при установке npm, возможно, с помощью аргументов командной строки?

Я могу предоставить полный журнал (но, похоже, больше нет соответствующей информации), используя pastebin, если это необходимо.


6
Небольшая хитрость, если имя пользователя содержит нотацию домен \ пользователь, замените обратную косую черту с помощью escape-кода http (% 5C)

@layos Большое спасибо. Если бы это было Reddit, я бы дал тебе золото.
Коринна

Ответы:


39

set http_proxyработал очень хорошо для меня, но мне приходилось вводить его каждый раз, когда я открывал командную строку. Поэтому мне пришлось объединить несколько ответов, и теперь мой постоянный.

Моя последовательность пошла следующим образом:

  • Перейти к C:\Users\YourUserName
  • Создайте файл с именем .npmrc
  • Внутри этого файла введите следующее (если вы находитесь в домене AD):

proxy = http://domain\\username:password@ip:port

  • Или используйте это, если вы НЕ находитесь в домене AD:

proxy = http://username:password@ip:port

  • Сохранить файл
  • Откройте командную строку и попробуйте использовать npm

Другие имели дополнительный успех с помощью следующей дополнительной команды:

strict-ssl = false

* Вы должны иметь возможность использовать IP-адрес или URL-адрес прокси вместо «IP» выше.

Ваша строка прокси может быть немного подправлена, но это сделало так, что мне не нужно было добавлять это каждый раз.

ура


3
Заголовок, если ваш пароль содержит "@", npm не сможет правильно проанализировать ваши настройки прокси. Возможный обходной путь - ввести поддельное имя пользователя: пароль в конфигурации npm и использовать локальный прокси-сервер (например, fiddler), чтобы изменить заголовок Proxy-Authorization запроса, чтобы иметь правильное имя пользователя: пароль. Имейте в виду, что имя пользователя: пароль, хранящийся в Proxy-Authorization, закодирован в base64.
BStruthers

9
Получил мое, чтобы работать с:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Люк


1
Эй, я попытался использовать, domain\\user:password@urltoproxy:portоднако, когда я запускаю npm installизменения параметра на domain/user:password@urltoproxy:portТак, как мне обойти это?
Джейкоб Шнайдер

У меня та же проблема, что и у @JacobSchneider, на моем .npmrc: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 затем, когда я получаю настройки из config с npm config get proxy: http://domain/username:password#@proxy.url:8080 обратите внимание, что экранированный обратный слеш '\\' меняется на прямой слеш '/'
pompalini

10

Может быть, установка переменной среды подойдет вам:

set HTTP_PROXY=http://user:pass@server.url:port

(В моем случае это решает проблему «подключить НЕИЗВЕСТНО», но я получаю совершенно другую ошибку «зависание сокета». Я также попытался установить переменную среды HTTPS_PROXY, но получил тот же результат.)


Я попытался установить переменную окружения, а также попытался передать --proxy user: pass@server.url: port в команду, но теперь я всегда получаю ECONNREFUSED. Нужно ли указывать мой домен AD для входа в прокси?
Тобиас

@Tobias попробуйset HTTP_PROXY=http://domain\user:pass@server.url:port
Адам Грант

8

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

  • Перейти к: C:\Users\YourUserName
  • Создайте файл с именем .npmrc
  • И это запись будет читать:

    registry = http://registry.npmjs.org
    
  • Попробуйте команду еще node cli.js install npm -gfраз.


Я создал файл с указанным вами содержимым, но все еще получаю сообщение НЕИЗВЕСТНАЯ ошибка :(
Тобиас

Приветствия для этого. Сделал "npm config set registry registry.npmjs.org ", чтобы обойти https: // и все хорошо в моей настройке Windows.
Гэвин Гилмор

1
если кто-то получит сообщение ETIMEOUT, добавьте настройку прокси-сервера с помощьюnode config set proxy http://username:password@server:port
Джереми С.

Для меня сработало создание ~/.npmrcфайла, подобного описанному выше, который говорит npm использовать http://реестр вместо https://, а затем установить для моей http_proxyпеременной среды значениеhttp://myusername:mypassword@proxy.company.com:1234
Maxy-B

Заголовок, если ваш пароль содержит "@", npm не сможет правильно проанализировать ваши настройки прокси. Возможный обходной путь - ввести поддельное имя пользователя: пароль в конфигурации npm и использовать локальный прокси-сервер (например, fiddler), чтобы изменить заголовок Proxy-Authorization запроса, чтобы иметь правильное имя пользователя: пароль. Имейте в виду, что имя пользователя: пароль, хранящийся в Proxy-Authorization, закодирован в base64.
BStruthers

4

После некоторых исследований я мог бы использовать это следующим образом:

  1. Установите авторизационный прокси-сервер NTLM или другой прокси-сервер для NTLM, например Cntlm. Лично я предпочитаю сервер python, потому что я могу с ним повозиться, и производительность не является проблемой.

  2. Настроить конфигурацию; обратите внимание, что в моем случае мне нужно было включить режимы LM и NT, и я подозреваю, что в настоящее время это нормальный случай.

  3. Задайте переменные среды http_proxy и https_proxy, чтобы они указывали на ваш локальный прокси:

    set http_proxy = "localhost: 5865"
    set https_proxy = "localhost: 5865"

  4. Теперь npm должен работать, конечно, он должен выполняться из оболочки, в которой определены вышеуказанные переменные окружения.


3

Следующее сработало для меня.

В Windows 7:

npm config set proxy xxhttp://username:password@proxyhost:port# 

Это должно создать файл с именем .npmrcв C:/users/<username>папке.


3

Введите это в командной строке:

npm set proxy http://user:pass@ip:port

npm set https-proxy http://user:pass@ip:port

НЕ ЗАБЫВАЙТЕ ВКЛЮЧИТЬ HTTP: // перед своим именем пользователя. Это сработало для меня.


2

Эта проблема была решена для меня после создания файла .npmrc, как описано выше, а затем после запуска команды adduser и следования инструкциям cmd.

npm adduser

Запустите следующую команду, чтобы увидеть, есть ли у вас авторизованное имя пользователя:

npm whoami

2

Каждый из приведенных выше ответов требует, чтобы пользователь написал свой пароль в текстовом файле или в переменной окружения.

Лично мне не нравилось подобное решение из-за их небезопасного подхода. Поэтому я попытался написать приложение, которое вводит токен Kerberos текущего пользователя в обмены между клиентом (npm, bower, git) и прокси. Тем не менее, Active Directory является проприетарной реализацией Kerberos.

Я использую это программное обеспечение каждый день на хосте Windows 8.1. Вы можете найти код (golang) и двоичные файлы первого выпуска на https://github.com/nilleb/authentication-proxy .


1

Все три вещи работали для меня в .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org

1

По крайней мере, в Windows это работает для меня со следующей настройкой:

proxy = http: // домен % 5C имя пользователя : пароль @ proxy_ip : порт

т. е. (1) использовать %5Cвместо \(как предложено в другом месте) и (2) использовать IP-адрес вместо имени локального компьютера для прокси-сервера.


Это правильно - домен + имя пользователя и пароль должны быть отдельно закодированы. Например, если у вас есть # в вашем пароле, замените его на% 23
saille

1

Вы получите прокси-хост и порт от администратора вашего сервера или службы поддержки.

После этого настроить

npm config set http_proxy http://username:password@proxyofmycomp.com:itsport
npm config set proxy http://username:password@proxyofmycomp.com:itsport

Если в пароле есть специальный символ, попробуйте использовать% urlencode. Например: - фунт (хэш) должен быть заменен на% 23.


2
К каким версиям относится ваш ответ, учитывая, что вопрос был задан более 3 лет назад?
Джейсон Аллер

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

0

Решение сработало для меня следующее:

Конфигурация npm http_proxy http: // имя пользователя : пароль @ хост / IP : порт

Конфигурация npm установленный прокси http: // имя пользователя : пароль @ хост / IP : порт

замените параметры на значения, в моем случае

имя пользователя : (пусто)

пароль : (пусто)

хост / IP : 192.36.36.110

порт : 8080

так что мои команды

Конфигурация npm http_proxy http: //: @ 192.36.36.110: 8080

Конфигурация npm для настройки прокси http: //: @ 192.36.36.110: 8080


0

CNTLM не работает для меня. Я перепробовал все возможные комбинации. NPM выдавал ошибку аутентификации. Скрипач пришел на помощь и сэкономил мое время. Это легко установить и настроить. Установите для правила Fiddler значение «Автоматически проверено». В .npmrc установите эти

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:8888
https-proxy=http://127.0.0.1:8888
http-proxy=http://127.0.0.1:8888
strict-ssl=false

У меня это сработало :)


0

То, что работало для меня, было следующим:

registry=http://registry.npmjs.org
proxy=http://<url.pac>
https-proxy=http://<url.pac>
http-proxy=http://<url.pac>
strict-ssl=false

Мне не нужно было вводить имена пользователей или пароли, просто URL-адрес файла PAC.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.