npm无法工作 - "read ECONNRESET"

246
我在使用npm时遇到了问题,无法安装任何软件包。这是错误信息:
C:\Windows\system32>npm install -g yo
npm http GET https://registry.npmjs.org/yo
npm http GET https://registry.npmjs.org/yo
npm http GET https://registry.npmjs.org/yo
npm ERR! network read ECONNRESET
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 settin
gs.
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! System Windows_NT 6.2.9200
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "yo"
npm ERR! cwd C:\Windows\system32
npm ERR! node -v v0.10.17
npm ERR! npm -v 1.3.8
npm ERR! syscall read
npm ERR! code ECONNRESET
npm ERR! errno ECONNRESET
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Windows\system32\npm-debug.log
npm ERR! not ok code 0

有任何想法为什么会这样吗?这是我的网络设置,看起来我没有配置任何代理。我也禁用了所有防火墙。

在此输入图片描述


你能在浏览器中访问此页面吗 https://registry.npmjs.org/yo? - thefourtheye
它似乎SSL证书已过期! - Kushagra Gour
@thefourtheye 是的,我可以访问那个链接。 - Omar
npm 不会安装任何东西。这个问题不仅仅出现在安装 express 上。 - Omar
您可能需要检查 C:\Windows\system32\npm-debug.log 文件,该文件将提供更准确的信息以解决您的问题。 - Nanda Kumar
32个回答

440
使用
npm config set registry http://registry.npmjs.org/

以便 npm 请求 http url 而不是 https

然后尝试相同的 npm install 命令。


26
无法提供翻译,因为我无法确定要翻译的具体内容。如果您能够提供更多上下文或明确要翻译的内容,我将很乐意为您提供翻译并提供解释。 - Rishul Matta
47
这种“修复”容易受到中间人攻击。我不会在生产环境中使用它。 - thesmart
5
问题可能是你被你的ISP或公司的防火墙/代理服务器阻止访问该网站。使用上述方法更快,更简单,但它也不安全,因为它不验证您是否连接到正确的网站。要检查是否被阻止,请在浏览器中转至 https://registry.npmjs.org/。你应该会收到一些文本返回。 - Marlon
2
哈哈...我已经断断续续地尝试解决这个问题好几个月了。我一直在禁用 VPN,获取软件包,然后重新登录。谢谢你。其他人,问题很简单,就是你的代理地址/端口不正确或者(在这种情况下)你的代理没有配置为监听 HTTPS 流量。 - voidzero
4
我知道这可能不安全,但是拜托了 - 我尝试了所有方法来解决使用Angular CLI创建新的Angular 4应用程序时出现的ECONNRESET错误,而那个解决方案是唯一有效的。在创建新项目后,您可以切换回https。无论如何,再次感谢@mithunsatheesh。 - born2fr4g
显示剩余2条评论

77

您可能需要检查您的NPM代理设置,甚至删除它。

npm config get proxy
npm config rm proxy
npm config rm https-proxy

人们可能会期望NodeJS+NPM的全新安装不会配置代理。令人惊奇的是,我的确带有一个指向IP和端口3128的代理定义。移除代理可以解决问题。


2
我试图使用cmd在Angular项目中安装jquery - npm install jquery 但是出现了代理错误,现在尝试了这个解决方案已经解决了。 - Mohammed Amen
经过一天的努力,我终于通过这个解决方案解决了我的问题 npm ERR! network In most cases you are behind a proxy or have bad network settings。谢谢。 - Mohammad Hossein Ganjyar
这个实际上起作用了,而且似乎比其他解决方案更安全。 - Kamil B
这个方法对我也起作用了。不幸的是,之前的解决方案没有起作用。 - Amit Kumar Jain

21
在家时,请删除您的代理设置并在办公室网络上启用,尽管这可能会有些烦人,但对我很有效。
npm config set proxy http://xxx.xxx.xxx.4:8080   
npm config set https-proxy http://xxx.xxx.xxx.4:8080

npm config rm proxy   
npm config rm https-proxy

上一个位元对我有用 - 我检查了我的 .npmrc 文件,删除代理后旧的 https 代理仍然存在。 - Jayx
这个正在工作,但是如何取消配置或重新配置为默认设置,以便在没有代理的其他网络中使用? - D V Yogesh

18

在某些环境下,系统代理设置可能无法满足npm的工作需求,您可能还需要指定代理服务器/端口。

    npm config set proxy "http://your-proxy.com:80"

13

这可能是由于使用 sudo 安装 npm 任何东西,导致缓存中的文件被 root 用户拥有,从而导致此问题。您可以通过运行以下命令来修复它:

sudo rm -rf ~/.npm

以删除缓存。然后再次尝试您正在进行的操作,确保您永远不要与 npm 一起使用 sudo(否则问题可能会再次出现)。

更多信息请参见:npm throws error without sudo


忘记了需要提升为管理员才能执行 npm -g update (就像我安装它时所做的那样)。谢谢。 - George
9
这是怎样导致 "ECONNRESET" 错误的?你说得没错,使用 "sudo" 命令可能会以前所未有的方式破坏东西,但导致注册表服务器断开连接有点难以置信。 - zigg
这对我有用!我试图执行 npm i next-pwa,并遇到了与问题中提到的类似的错误。由于没有设置代理,因此其他解决方案对我无效。我记得之前曾经一起使用过 sudonpm 命令,所以尝试了这个解决方案,希望它也能起作用。非常感谢 @Kevin! - Dorji Tshering

8
重启电脑后,它工作了。

非常正确,我尝试了所有其他的解决方案,但这个有效。但在我的情况下,在删除我的node_modules文件夹并尝试重新安装之前,我也运行了sudo apt update -> sudo apt upgrade,结果遇到了这个错误。重启后问题得到了解决。 - Prince Agrawal
解决方案,传说中的杜 - Muhammad Ibrahim

7

删除 yarn.lock, package-lock.json, node_modules

然后

npm install -f 
<工作对我来说没问题>

4
我在Windows上安装npm包时遇到了同样的问题。通过以下步骤解决了这个问题:
1. 以管理员身份打开命令提示符并运行以下三个命令:
npm config rm proxy
npm config rm https-proxy
npm install npm@latest -g
2. 对于Mac / Linux用户,需要使用sudo权限运行以下命令:
sudo npm config rm proxy
sudo npm config rm https-proxy
sudo npm install npm@latest -g
基本上,这是一个与npm版本相关的问题。请检查是否已经解决了问题。

4

npm config rm proxy

npm config rm https-proxy

以上命令对我有用!


4

让npm在代理网络中正常工作的三个步骤:

第一步是设置npm注册表,默认情况下可能使用https。

npm config set registry "http://registry.npmjs.org/"

第二步是在您的系统中设置代理。如果您的组织使用代理或您自己使用代理。

npm config set proxy "http://username:password@proxy-url:proxy-port"

npm config set https-proxy "http://username:password@proxy-url:proxy-port"

您还可以通过以下方式检查它们是否设置:

npm config get https-proxy

获取所有值。


它没有显示任何错误,但安装卡在行上 - loadRequestedDeps: sill install loadAllDepsIntoIdealTree。 - RSB
这是另一个问题。你的代理问题已经解决了。希望这可以缩短你的时间。https://dev59.com/7pzha4cB1Zd3GeqPMe2K - Himanshu sharma

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