如何在Windows上的身份验证代理后面安装NPM?


30

我需要在Windows上运行最新版本的Node和NPM。我安装了Node 0.5.8,并从GitHub下载了NPM的源代码。我安装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

我认为这是一个问题,因为我需要在我的代理服务器上进行身份验证才能连接到Internet。但是我没有办法告诉安装程序使用我的凭据登录。是否可以通过命令行参数将我的代理IP和登录信息提供给npm安装?

如果需要,我可以使用pastebin提供完整的日志(但似乎没有更多相关信息)。


6
一个小技巧,如果用户名包含域\用户符号,则将反斜杠替换为http转义代码(%5C)

@layos非常感谢。如果是reddit,我给你金。
Korinna

Answers:


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将无法正确解析您的代理设置。可能的解决方法是将伪造的username:password放在npm配置中,并使用本地代理(如fiddler)来修改请求的Proxy-Authorization标头,使其具有正确的username:password。请记住,存储在Proxy-Authorization中的username:password是base64编码的。
BStruthers

9
与我合作:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
路加福音

1
没让我使用用户名:密码
philx_x

1
嘿,domain\\user:password@urltoproxy:port但是,当我运行npm install选项更改为时,我尝试使用。那我该domain/user:password@urltoproxy:port如何解决呢?
Jacob Schneider

我在.npmrc上遇到与@JacobSchneider相同的问题:-ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 然后当我从config中进行设置时npm config get proxyhttp://domain/username:password#@proxy.url:8080 请注意,转义的反斜杠'\\'变为正斜杠'/'
pompalini

10

也许设置一个环境变量将对您有用:

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

(对于我来说,这解决了“ connect UNKNOWN”问题,但是我得到了一个完全不同的“ socket hang up”错误。我也尝试设置HTTPS_PROXY环境变量,但是得到了相同的结果。)


我尝试设置环境变量,还尝试将--proxy user:pass@server.url:port传递给命令,但现在我总是得到ECONNREFUSED。我是否需要为代理登录指定我的AD域?
Tobias

@Tobias尝试set HTTP_PROXY=http://domain\user:pass@server.url:port
Adam Grant

8

我遇到了同样的问题,这是我所做的工作:

  • 去: C:\Users\YourUserName
  • 创建一个名为 .npmrc
  • 它的条目将显示为:

    registry = http://registry.npmjs.org
    
  • 再试node cli.js install npm -gf一次命令。


我使用您提到的内容创建了文件,但仍然出现连接未知错误:(
Tobias

为此加油。做了一个“ npm config设置注册表registry.npmjs.org ”来绕过https://,我的Windows设置一切都很好。
加文·吉尔默

1
如果有人收到ETIMEOUT消息,请使用node config set proxy http://username:password@server:port
Jeremy S.

对我~/.npmrc有用的是创建上述文件,该文件告诉npm使用http://注册表而不是https://,然后将http_proxy环境变量设置为http://myusername:mypassword@proxy.company.com:1234
Maxy-B 2012年

请注意,如果您的密码包含“ @”,npm将无法正确解析您的代理设置。可能的解决方法是将伪造的username:password放在npm配置中,并使用本地代理(如fiddler)来修改请求的Proxy-Authorization标头,使其具有正确的username:password。请记住,存储在Proxy-Authorization中的username:password是base64编码的。
BStruthers

4

经过研究,我可以通过以下方式使用它:

  1. 为NTLM安装NTLM授权代理服务器或其他代理服务器,例如Cntlm。就个人而言,我更喜欢python服务器,因为我可以修改它,而性能也不是问题。

  2. 设置配置;请注意,就我而言,我必须同时启用LM和NT模式,并且我怀疑这是当今的正常情况。

  3. 将http_proxy和https_proxy环境变量设置为指向您的本地代理:

    设置http_proxy =“ localhost:5865”
    设置https_proxy =“ localhost:5865”

  4. npm现在应该可以工作,当然应该从定义了上述环境变量的shell中执行它。


3

以下对我有用。

在Windows 7上:

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

这将.npmrcC:/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

上述答案中的每一个都需要用户将其密码写入文本文件或环境变量中。

我个人不喜欢这样的解决方案,因为它们的方法不安全。因此,我尝试编写一个在客户端(npm,bower,git)和代理之间的交换中注入当前用户的Kerberos令牌的应用程序。也就是说,Active Directory只是Kerberos的专有实现。

我每天在Windows 8.1主机上使用此软件。您可以在https://github.com/nilleb/authentication-proxy上找到代码(golang)和第一个发行版二进制文件。


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地址代替代理服务器的本地计算机名称。


这是正确的-域+用户名和密码需要分别进行URL编码。例如,如果您有#你的密码,用%替换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年前提出的,您的答案适用于哪些版本?
杰森·艾勒

我相信这没关系。经过反复尝试后,我找到了解决该问题的方法,却从不知道自己的密码是问题。为了使密码完美无缺,甚至在十年之前都没有提出任何问题:)...
Shamseer

0

适用于我的解决方案如下:

npm config设置http_proxy http:// 用户名密码 @ host / IP端口

npm config设置代理http:// 用户名密码 @ host / IP端口

在我的情况下,将参数替换为值

用户名:(空)

密码:(空)

主机/ IP:192.36.36.110

端口 :8080

所以我的命令是

npm配置设置http_proxy http://:@ 192.36.36.110:8080

npm config设置代理http://:@ 192.36.36.110:8080


0

CNTLM对我不起作用。我尝试了所有可能的组合。NPM正在提供身份验证错误。提琴手来救援并节省了我的时间。易于安装和配置。将Fiddler Rule设置为自动认证。在.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

我不必输入任何用户名或密码,只需输入PAC文件网址即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.