有没有办法让npm install(命令)在代理后面工作?

Ben*_*Ben 255 node.js npm

阅读.npmrc文件中的代理变量,但它不起作用.试图避免手动下载所有需要包和安装.

Ren*_*ama 326

我这样解决了这个问题:

  1. 我运行这个命令:

    npm config set strict-ssl false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后将npm设置为使用http而不是https运行:

    npm config set registry "http://registry.npmjs.org/"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后我使用以下语法安装包:

    npm --proxy http://用户名:password@cacheaddress.com.br:80\install packagename

username:password如果代理不要求您进行身份验证,请跳过该部分

编辑:我的一个朋友刚刚指出你可以通过设置BOTH HTTP_PROXY和HTTPS_PROXY环境变量让NPM在代理后面工作,然后正常发出命令 npm install express(例如)

EDIT2:正如@BStruthers评论的那样,请记住,如果包含@将整个密码放在引号中,那么包含"@"的密码将无法正确解析

  • 如果您的密码包含@符号,则可以通过将用户名和密码放在引号内来传递密码. (14认同)
  • 抬头,如果您的密码包含"@",则npm将无法正确解析您的代理设置.一个潜在的解决方法是在npm配置中放置一个伪造的用户名:password,并使用本地代理(如fiddler)修改请求的Proxy-Authorization标头以获得正确的用户名:password.请记住,存储在代理授权中的用户名:密码是base64编码的. (7认同)
  • 您的密码中可以包含特殊字符,但必须进行网址编码.因此,如果您的密码是"my @ password",则.npmrc文件的密码部分应为"my%40password".在某些情况下将它放在引号中有效,但编码它是万无一失的. (7认同)

j.i*_*s.h 298

设置npm代理

用于HTTP:

npm config set proxy http://proxy_host:port
Run Code Online (Sandbox Code Playgroud)

用于HTTPS:

使用https代理地址(如果有)

npm config set https-proxy https://proxy.company.com:8080
Run Code Online (Sandbox Code Playgroud)

否则重用http代理地址

npm config set https-proxy http://proxy.company.com:8080
Run Code Online (Sandbox Code Playgroud)

注意:https-proxy没有https协议,但是http.

  • 请注意,https-proxy没有'https'作为协议,但是'http'.改变这一点解决了我的问题. (56认同)
  • 没有SOCKS支持? (9认同)
  • @peterhil感谢您的提示.这很疯狂,但我花了几个小时用"https"来解决这个问题.知道它为什么会这样吗? (3认同)
  • @ManojNV,与代理服务器的连接未加密.它不是在谈论代理服务器的HTTPS,只是HTTP.有效负载是客户端和目标服务器之间的SSL.如果它是代理服务器的HTTPS,那么事情将被加密/解密两次. (2认同)

Kat*_*tie 101

如有疑问,请像我一样尝试所有这些命令:

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
Run Code Online (Sandbox Code Playgroud)

=======

UPDATE

将您的设置放入~/.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
    
    Run Code Online (Sandbox Code Playgroud)
  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

  • 多谢你们!!很高兴它的工作!这对工作来说是一个巨大的麻烦,所以我很高兴我可以帮助别人:P (4认同)
  • 最后一个命令对我有用.之前的所有失败 (3认同)
  • 我读了大约50个关于这个完整的代理配置的答案......唯一有效的是你的答案......谢谢!!! (3认同)
  • +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` for npm config,然后使用`npm --proxy http:// myusername:mypassword @ proxy安装npm包. us.somecompany:8080 --without-ssl --insecure -g install {packagename}`.谢谢 (2认同)

Ben*_*eys 32

您是否尝试过命令行选项而不是.npmrc文件?

我认为这样的事情npm --proxy http://proxy-server:8080/ install {package-name}对我有用.

我也见过以下内容: npm config set proxy http://proxy-server:8080/


Car*_*cia 20

虽然已经有很多好的建议,但对于我的环境(Windows 7,使用PowerShell)和node.js(v8.1.2)的最新版本,除了我遵循brunowego设置之外,以上所有都没有用.

因此,请检查您的设置:

npm config list
Run Code Online (Sandbox Code Playgroud)

代理背后的设置:

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
Run Code Online (Sandbox Code Playgroud)

希望这会为某人节省时间


And*_*rei 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


max*_*mus 15

这适用于Windows:

npm config set proxy http://domain%5Cuser:pass@host:port
Run Code Online (Sandbox Code Playgroud)

如果您不在任何域中,请使用:

npm config set proxy http://user:pass@host:port
Run Code Online (Sandbox Code Playgroud)

如果您的密码包含特殊字符,例如",@,:等等,通过他们的URL编码值替换它们.例如"- > %22,@- > %40,:- > %3A.%5C用于角色\.

  • 感谢您的建议,这对我有用.你可以用ctrl + shift + j打开你的javascript控制台,输入`encodeURIComponent("YourP @ ssword")`来获取密码的编码版本. (5认同)

小智 8

$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
Run Code Online (Sandbox Code Playgroud)


abh*_*ait 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
Run Code Online (Sandbox Code Playgroud)


Abh*_*edi 7

vim ~/.npmrc在你的Linux机器上添加以下内容.registry在许多情况下,不要忘记添加部件,因为这会导致故障.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

  • 许多代理都支持通过隧道发送https请求,但是它们不会处理与自己的https连接。因此,遇到麻烦时,请尝试将“ https-proxy = https:// ..”修改为“ https-proxy = http:// ..” (2认同)

Ale*_*icz 7

最后,我设法解决了使用AD身份验证作为代理的问题。我必须执行:

npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/
Run Code Online (Sandbox Code Playgroud)

URL编码任何特殊字符(例如反斜杠或#)非常重要,在我的情况下,我必须编码

  1. backshlash用%5c,使domain\user willdomain%5Cuser
  2. #与签名%23%0A等等之类密码Password#2Password%23%0A2

我还添加了以下设置:

npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)


Sre*_* GS 6

虽然我用config设置代理,但问题没有解决,但是这个之后对我有用:

npm --https-proxy http://XX.AA.AA.BB:8080安装cordova-plugins

npm --proxy http://XX.AA.AA.BB:8080安装


Eva*_*les 6

我尝试了所有这些选项,但由于某种原因,我的代理没有任何选项.然后,出于绝望/绝望,我随机尝试curl了我的Git Bash shell,它起作用了.

使用取消设置所有代理选项

npm config rm proxy
npm config rm https-proxy
Run Code Online (Sandbox Code Playgroud)

然后npm install在我的Git Bash shell中运行完美.我不知道它是如何正确设置代理和Windows cmd提示不是,但它的工作原理.


ven*_*pal 6

npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.


Muh*_*han 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
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用.设置http和https代理.


SoS*_*ufi 5

在Windows系统上

尝试删除代理和注册表设置(如果已设置),然后通过以下方式在命令行上设置环境变量

SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port
Run Code Online (Sandbox Code Playgroud)

然后尝试运行npm install。这样,您将不会在.npmrc中设置代理,但在该会话中它将起作用。


Igo*_*ils 5

尝试在C:\ Users\.npmrc中找到.npmrc

然后打开(记事本),写入并保存在里面:

proxy=http://<username>:<pass>@<proxyhost>:<port>
Run Code Online (Sandbox Code Playgroud)

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/

按照指示进行操作,但始终出现相同的错误。

只有当我 从.npmrc文件中删除https-proxy https://proxyccc.xxx.ca:8080,npm install electronic --save-dev才起作用


Ors*_*nus 5

就我而言,我忘记在我的配置文件(可以在 C:\Users\[USERNAME]\.npmrc 中找到)代理地址中设置“http://”。所以,而不是拥有

proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]
Run Code Online (Sandbox Code Playgroud)

我有

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,但错误消息也没有多大帮助......


小智 5

curl 关于SSL 和证书问题的页面上有很好的信息。我的大部分答案都基于那里的信息。

使用 strict-ssl false 是不好的做法,并且会产生问题。我们可以做的是通过“中间人”证书添加正在注入的证书。

如何在 Windows 上解决此问题:

  1. 从基于 Mozilla 的 CA 包的curl下载 CA 证书。您还可以使用 curl 的“firefox-db2pem.sh”shellscript 来转换本地 Firefox 数据库。
  2. 使用 https 访问网页,例如Chrome 或 Internet Explorer 中的Stackoverflow
  3. 单击锁定图标,单击 Chrome 中的查看证书或“有效”
  4. 导航到认证路径。顶级证书,或根证书是我们要提取的证书。单击该证书,然后单击“查看证书”
  5. 单击第二个选项卡“详细信息”。单击“复制到文件”。选择 DER 格式并记下您保存文件的位置。选择一个合适的文件名,例如 rootcert.cer
  6. 如果您安装了 Git,您将拥有 openssl.exe。否则,请在此阶段为 windows 安装 git。openssl 可执行文件很可能位于 C:\Program Files\git\usr\bin\openssl.exe。我们将使用 openssl 将文件转换为 NPM 理解它所需的 PEM 格式。
  7. 使用以下命令转换您在第 5 步中保存的文件:
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    其中rootcert是您在第 5 步中保存的证书的文件名。
  8. 在足够聪明的文本编辑器中打开 outcert.pem 以理解行尾,所以不是记事本。选择所有文本并将其复制到剪贴板。
  9. 现在我们将该内容粘贴到步骤 1 中制作的 CA Cert 包的末尾。因此,在您的高级文本编辑器中打开cacert.pem。转到文件末尾并将上一步的内容粘贴到文件末尾。(保留刚刚粘贴的内容下方的空行)
  10. 将保存的 cabundle.pem 复制到合适的位置。例如您的 %userprofile% 或 ~。记下文件的位置。
  11. 现在我们将告诉 npm/yarn 使用新包。在一个命令,写入
    npm config set cafile **C:\Users\username\cacert.pem
    其中C:\ Users \用户名\ cacert.pem是从步骤10中的路径。
  12. 可选:再次打开strict-ssl, npm config set strict-ssl true

呼!我们做到了!现在 npm 可以理解如何连接了。好处是你可以告诉 curl 使用相同的 cabundle.pem,它也可以理解 HTTPs。