错误:getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443

40

我正在一家公司的网络中工作。

尝试安装npm,但一遍又一遍地出现这个错误。

$ npm install
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program     Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install"
npm ERR! node v6.1.0
npm ERR! npm  v3.8.6
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! syscall getaddrinfo

npm ERR! network getaddrinfo ENOTFOUND registry.npmjs.org    registry.npmjs.org:443
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Angular-test\angular-phonecat\npm-debug.log
尝试过这个: npm config set registry https://registry.npmjs.org/,但仍然遇到相同的错误。

您的系统是否已连接到互联网? - abdulbarik
正如错误信息所述,您面临连接到registry.npmjs.org的问题。遵循状态建议,在计算机上正确配置网络访问。 - Holger Just
@abdulbarik -- 是的。系统已连接到互联网。 - Bhuvaneshwari K
@HolgerJust - 配置网络访问?是否有适当的互联网访问。您是指代理问题吗? - Bhuvaneshwari K
甚至尝试了 git config --global url."https://".insteadOf git:// - Bhuvaneshwari K
这个链接帮助我解决了这个问题 --> https://dev59.com/fFgQ5IYBdhLWcg3wr1_V#45877279 - upsite
19个回答

51

尝试以下步骤:

  1. 确保您拥有互联网连接:ping 8.8.8.8
  2. 确保DNS解析器正常工作:ping www.google.com
  3. 确保您可以访问registry.npmjs.org:ping registry.npmjs.org
  4. 确保您可以通过https连接。

在浏览器中尝试:https://registry.npmjs.org/

请确保您正在尝试连接到:

  • registry.npmjs.org

而不是:

  • "registry.npmjs.org registry.npmjs.org:443"

或其他由少数主机名组成的奇怪字符串,因为解析器抱怨包括端口号的主机名很奇怪,它不应该关心。好吧,我测试了一下,对于未找到的主机,它应该长这样。

更新

从您对此答案的评论中,如果您甚至无法ping通8.8.8.8,则似乎您没有直接连接到互联网。

如果您使用代理访问Web,则还必须配置npm以使用它。使用:

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

但不要使用 http://example.com:8080,而是使用您公司实际需要的 - 询问某人或查看浏览器配置。

要在Chrome中查看代理配置,请参见此处

更新2

如果您可以在浏览器中访问https://registry.npmjs.org/,但无法运行ping registry.npmjs.org,那么说明您的浏览器必须配置使用代理,或者除了浏览器之外的其他程序被限制使用互联网。

无论哪种情况,您都应该向公司中的某个人询问,因为很可能您需要使用特定的代理或者有人需要解除对您的npm的限制,允许它访问网络。

网络访问可能会受到计算机上安装的防火墙或网络路由器的阻止。没有了解您公司的具体配置很难确定原因。

更新3

如果有任何环境变量 "https_proxy",请将其移除或使用正确的值。


  1. 8.8.8.8的Ping统计信息:数据包:已发送 = 4,已接收 = 0,丢失 = 4(100%丢失)。
  2. Ping请求未找到主机www.google.com。请检查名称并重试。
  3. 同第二个
  4. 正在获取一些数据。
- Bhuvaneshwari K
即使尝试了您提到的命令,我仍然遇到了上述错误。@rsp - Bhuvaneshwari K
@BhuvanaK 但是你是否用你实际的公司代理替换了 example.com?你是在浏览器设置中找到它,还是向公司的某个人询问服务器和端口应该是什么?请参见我的答案更新2。 - rsp
是的,现在正常工作了。出现了不匹配的情况。在代理中,端口输入为8080。在npm中,尝试使用8000。现在一切都正常了。非常感谢。 - Bhuvaneshwari K
@BhuvanaK 听到这个消息很好。您可以接受答案,以便其他人可以看到问题已解决。这是如何正确接受答案的方法 - rsp
显示剩余2条评论

22

使用:https://registry.npmjs.org/ 请确保您正在尝试连接到:

registry.npmjs.org

如果没有错误,请尝试清除缓存

npm cache clean --force

那么试试看

npm install

即使您有任何错误

npm config set registry https://registry.npmjs.org/

那么尝试一下

npm install -g @angular/cli

2
npm config set registry https://registry.npmjs.org/ 是关键。谢谢! - Joaquin Iurchuk

17

我试过很多种方法,但这个对我来说效果很好。

npm config rm proxy
npm config rm https-proxy

如果以上两个命令不起作用,尝试使用这个命令。

npm config --global rm proxy
npm config --global rm https-proxy

"--global" 是重要的部分...相当棘手...非常感谢! :) - Markus

10

首先,编辑NetworkManager.conf文件:

vim /etc/NetworkManager/NetworkManager.conf

评论这一行:

#dns=dnsmasq

最终
sudo service network-manager restart
sudo service docker restart

谢谢@jansanchez,它帮了我很多。 - manoj
我也遇到了@bhuvana-k提到的完全相同的问题,当直接连接到互联网时。通过Web浏览器连接可以工作,而通过npm拉取依赖项会失败 - 禁用dnsmasq有所帮助 - 谢谢! - Mike Floyd

9
您可以使用此命令。
npm config delete proxy

这是因为formidable存在严重漏洞,所以需要通过运行上述命令来覆盖。


嗨!根据abdulbarik的答案上的评论,提问者已经尝试了您建议的方法,但问题仍未解决。 - chornge

3
如果您在代理后面工作,必须为npm设置代理以将其连接到仓库。
npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.somecompany.com:8080
npm config set https-proxy http://myusername:mypassword@proxy.somecompany.com:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.somecompany.com:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.somecompany.com:8080

注意:如果您的密码包含特殊字符,例如@,例如:密码:mypwd1@xyz,则使用%40代替@。例如:

npm config set proxy http://myusername:mypwd1%40xyz@proxy.somecompany.com:8080

1
对我来说,它的运行方式是:我设置了npm config set proxy http://proxy.ops.xxx-yyy.zzz: 8080/和npm config set https_proxy http://proxy.ops.xxx-yyy.zzz: 8080/。这里的“http://proxy.ops.xxx-yyy.zzz:8080/”将是您公司提供的代理,并且它可以完美地运行。 - AKS

2
npm config set registry https://registry.npmjs.org/

这是我唯一的解决方案。


能否简要解释一下实际问题中缺失的部分是什么,因为它是错误的,为什么操作命令能够解决问题,以及实际结果是什么? - myeongkil kim

1
在我的情况下,类似的错误(ENOTFOUND registry.npmjs.org)可以通过在npm install命令中添加--no-bin-links来解决。
可能看起来很奇怪,但这可能会帮助某些人。

0
如果使用Ubuntu,请尝试打开“所有设置”>“网络”>“网络代理”,将方法设置为自动并保存。

0
我花费了超过5个小时来尝试在Windows 8.1下解决这个问题。因此,我想分享我的经历并节省他人的时间。我没有使用代理...但是设置代理帮助解决了问题。所以我深入研究后发现,问题是由Comodo Firewall引起的...它阻止了cmd,因为我安装程序速度太快(关闭甚至关闭防火墙都没有帮助,这导致我花费了很长时间来找到这个问题...似乎还有一些其他的防火墙进程在后台运行)。您可能会遇到与其它防火墙/杀毒软件安装相同的问题,因此请确保未被阻止。祝好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接