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

node.js npm

265477 观看

26回复

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

作者: Ben 的来源 发布者: 2019 年 6 月 9 日

回应 (26)


270

我这样解决了这个问题:

  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如果代理不要求您进行身份验证,请跳过该部分

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

EDIT2:正如@BStruthers所评论的那样,请记住,包含“@”的密码不能正确解析

作者: Renato Gama 发布者: 30.10.2012 11:41

229

设置npm代理

用于HTTP

npm config set proxy http://proxy_host:port

用于HTTPS

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

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

作者: j.i.t.h.e.s.h 发布者: 24.04.2012 06:58

79

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

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

=======

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
    
  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
作者: Katie S 发布者: 20.08.2013 11:11

29

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

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

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

作者: Ben Humphreys 发布者: 27.09.2011 07:59

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

希望这会为某人节省时间

作者: Carmine Tambascia 发布者: 26.06.2017 11:36

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

作者: Andrei 发布者: 13.07.2015 10:58

14

这适用于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用于角色\

作者: maximus 发布者: 24.12.2015 06:49

7

$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port
作者: Sharan Rajendran 发布者: 10.11.2013 09:01

6

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

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

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

作者: Sreedhar GS 发布者: 14.11.2014 11:26

6

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

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

npm config rm proxy
npm config rm https-proxy

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

作者: Evan Knowles 发布者: 02.06.2016 09:10

6

这对我有用 -

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false
作者: abhishek khandait 发布者: 04.04.2017 10:32

6

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

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/
作者: Abhishek Dwivedi 发布者: 23.05.2017 10:59

5

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

作者: Rohith M 发布者: 15.02.2016 01:30

5

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

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

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

PS:请删除“<”和“>”!

作者: Igor Beaufils 发布者: 20.07.2016 04:11

5

npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

这解决了我的问题。

作者: venugopal 发布者: 28.08.2017 02:58

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是端口。根据您的代理设置进行更改。它适合我。

作者: Pankaj 发布者: 19.07.2016 10:54

4

对我来说即使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 electron --save-dev才能工作

作者: Nick Flanagan 发布者: 09.09.2016 06:23

4

在最终得到不同的答案之后,@ 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
作者: Muhammad Faizan Khan 发布者: 06.12.2017 04:57

3

在Windows系统上

尝试删除代理和注册表设置(如果已设置)并在命令行上设置环境变量

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

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

作者: SoSufi 发布者: 30.06.2016 08:15

2

许多应用程序(例如npm)可以使用来自用户环境变量的代理设置。

您可以在变量HTTP_PROXYHTTPS_PROXY之后添加到您的环境中,每个变量具有相同的值

HTTP://用户名:密码@ proxyAddress:proxyPort

例如,如果您有Windows,则可以添加代理,如下所示:

它在Windows上的外观

作者: Dmytro Melnychuk 发布者: 09.05.2017 06:28

2

在我的情况下,我忘了在我的配置文件中设置“http://”(可以在C:\ Users \ [USERNAME] \ .npmrc中找到)代理地址。所以没有

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

我有

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

这当然没有用,但错误信息也没有多大帮助......

作者: Acroneos 发布者: 12.06.2017 08:05

2

这个问题上面有很多答案,但没有一个对我有用。所有这些都提到添加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 发布者: 13.12.2017 07:45

1

当我在代理设置中没有http / http前缀时,npm失败,即使代理主机和端口是正确的值。它只在添加协议前缀后才起作用。

作者: Govind Avireddi 发布者: 20.06.2016 06:39

1

我的问题归结为我的一个愚蠢的错误。因为我有一天很快将我的代理放入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

也许这是一个边缘案例,但希望它可以帮助某人。

作者: Brandon Søren Culley 发布者: 04.10.2016 04:41

1

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

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

如何在Windows上解决这个问题:

  1. curl下载基于Mozilla CA捆绑包的CA证书。您还可以使用curl的“firefox-db2pem.sh”shellscript来转换本地Firefox数据库。
  2. 使用https转到网页,例如Chrome或Internet Explorer中的Stackoverflow
  3. 单击锁定图标,单击“查看证书”或Chrome中的“有效”
  4. 导航到证书路径。顶级证书或根证书是我们要提取的证书。单击该证书,然后“查看证书”
  5. 单击第二个选项卡“详细信息”。单击“复制到文件”。选择DER格式并记下保存文件的位置。选择合适的文件名,例如rootcert.cer
  6. 如果你安装了Git,你将拥有openssl.exe。否则,在此阶段安装git for windows。很可能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捆绑包的末尾。因此,在高级texteditor中打开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,它也会理解HTTP。

作者: sur 发布者: 07.03.2018 12:12

0

最后,我设法通过AD身份验证解决了这个问题。我不得不执行:

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

这是URL编码非常重要的任何特殊字符像backshlash或#在我的情况,我不得不编码1. backshlash所以用%5C domain\user willdomain%5Cuser 2,#标志%23%0A等等密码一样Password#2Password%23%0A2

作者: Aleksander Billewicz 发布者: 01.11.2018 06:23
32x32