使用npm下载安装electron时失败报错(read ECONNRESET、getaddrinfo ENOTFOUND、connect ETIMEDOUT、一直处于下载中状态)
使用npm下载安装electron时失败报错(read ECONNRESET、getaddrinfo ENOTFOUND、connect ETIMEDOUT、一直处于下载中状态)
文章目录
- 0. 问题产生的背景
- 1. 问题一:npm error RequestError: read ECONNRESET
- 2. 问题二:npm error RequestError: getaddrinfo ENOTFOUND release-assets.githubusercontent.com
- 3. 问题三:npm error RequestError: getaddrinfo ENOTFOUND github.com
- 4. 问题四:npm error RequestError: connect ETIMEDOUT 20.205.243.166:443
- 5. 问题五:一直处于下载中状态
- 6. 解决方法
0. 问题产生的背景
在学习 electron 时要下载 electron,但是在使用 npm 安装 electron 时一直报各种错误,即使设置了 npm 镜像源为淘宝镜像源也没用
npm config get registry
npm config set registry https://registry.npmmirror.com

1. 问题一:npm error RequestError: read ECONNRESET
1.1 问题呈现

npm error RequestError: read ECONNRESET
npm error at ClientRequest. (F:\Blog\electron-quick-start\node_modules\got\dist\source\core\index.js:970:111)
npm error at Object.onceWrapper (node:events:634:26)
npm error at ClientRequest.emit (node:events:531:35)
npm error at origin.emit (F:\Blog\electron-quick-start\node_modules@szmarczak\http-timer\dist\source\index.js:43:20)
npm error at emitErrorEvent (node:_http_client:107:11)
npm error at TLSSocket.socketErrorListener (node:_http_client:574:5)
npm error at TLSSocket.emit (node:events:519:28)
npm error at emitErrorNT (node:internal/streams/destroy:170:8)
npm error at emitErrorCloseNT (node:internal/streams/destroy:129:3)
npm error at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
npm error at TLSWrap.onStreamRead (node:internal/stream_base_commons:216:20)
1.2 问题产生的原因
日志中最关键的一行是:npm error RequestError: read ECONNRESET

ECONNRESET 是一个网络错误,意思是“连接被重置”。简单来说,就是你的电脑和下载服务器之间的网络连接被意外中断了
为什么会中断呢?因为安装 Electron 不仅仅是下载一个普通的 npm 包。Electron 包含了 Chromium 浏览器和 Node.js 运行时,体积非常大(通常几百MB)。它的安装过程分为两步:
npm先下载一个很小的 “installer” 脚本(日志里提到的install.js)- 然后这个脚本会去 GitHub Releases 页面下载对应你系统的 Electron 二进制文件(
electron.zip或electron.tar.gz)
ECONNRESET 错误就发生在第二步,由于 GitHub 的服务器在国外,国内网络访问时速度慢、不稳定,很容易在下载这个大文件的过程中连接超时或被中断,导致安装失败
2. 问题二:npm error RequestError: getaddrinfo ENOTFOUND release-assets.githubusercontent.com
2.1 问题呈现

npm error RequestError: getaddrinfo ENOTFOUND release-assets.githubusercontent.com
npm error at ClientRequest. (F:\Blog\electron-quick-start\node_modules\got\dist\source\core\index.js:970:111)
npm error at Object.onceWrapper (node:events:634:26)
npm error at ClientRequest.emit (node:events:531:35)
npm error at origin.emit (F:\Blog\electron-quick-start\node_modules@szmarczak\http-timer\dist\source\index.js:43:20)
npm error at emitErrorEvent (node:_http_client:107:11)
npm error at TLSSocket.socketErrorListener (node:_http_client:574:5)
npm error at TLSSocket.emit (node:events:519:28)
npm error at emitErrorNT (node:internal/streams/destroy:170:8)
npm error at emitErrorCloseNT (node:internal/streams/destroy:129:3)
npm error at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
npm error at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26)
2.2 问题产生的原因

日志中最关键的一行是:npm error RequestError: getaddrinfo ENOTFOUND release-assets.githubusercontent.com
我们来拆解一下这行错误:
RequestError: 这是一个网络请求错误getaddrinfo: 这是一个系统调用,它的作用是根据域名(比如www.google.com)查找对应的 IP 地址ENOTFOUND: 这是getaddrinfo调用返回的错误码,意思是“未找到”release-assets.githubusercontent.com: 这是npm在安装 Electron 时尝试访问的域名
所以,整个错误连起来的意思就是:你的电脑无法解析 release-assets.githubusercontent.com 这个域名,找不到它的 IP 地址,因此无法连接到这个服务器
3. 问题三:npm error RequestError: getaddrinfo ENOTFOUND github.com
3.1 问题呈现

npm error command failed
npm error command C:\windows\system32\cmd.exe /d /s /c node install.js
npm error RequestError: getaddrinfo ENOTFOUND github.com
npm error at ClientRequest. (F:\Blog\electron-quick-start\node_modules\got\dist\source\core\index.js:970:111)
npm error at Object.onceWrapper (node:events:634:26)
npm error at ClientRequest.emit (node:events:531:35)
npm error at origin.emit (F:\Blog\electron-quick-start\node_modules@szmarczak\http-timer\dist\source\index.js:43:20)
npm error at emitErrorEvent (node:_http_client:107:11)
npm error at TLSSocket.socketErrorListener (node:_http_client:574:5)
npm error at TLSSocket.emit (node:events:519:28)
npm error at emitErrorNT (node:internal/streams/destroy:170:8)
npm error at emitErrorCloseNT (node:internal/streams/destroy:129:3)
npm error at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
npm error at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26)
3.2 问题产生的原因
与 问题二产生的原因 类似
4. 问题四:npm error RequestError: connect ETIMEDOUT 20.205.243.166:443
4.1 问题呈现

npm error command failed
npm error command C:\windows\system32\cmd.exe /d /s /c node install.js
npm error RequestError: connect ETIMEDOUT 20.205.243.166:443
npm error at ClientRequest. (F:\Blog\electron-quick-start\node_modules\got\dist\source\core\index.js:970:111)
npm error at Object.onceWrapper (node:events:634:26)
npm error at ClientRequest.emit (node:events:531:35)
npm error at origin.emit (F:\Blog\electron-quick-start\node_modules@szmarczak\http-timer\dist\source\index.js:43:20)
npm error at emitErrorEvent (node:_http_client:107:11)
npm error at TLSSocket.socketErrorListener (node:_http_client:574:5)
npm error at TLSSocket.emit (node:events:519:28)
npm error at emitErrorNT (node:internal/streams/destroy:170:8)
npm error at emitErrorCloseNT (node:internal/streams/destroy:129:3)
npm error at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
npm error at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16)
4.2 问题产生的原因
与 问题二产生的原因 类似
5. 问题五:一直处于下载中状态
5.1 问题呈现

执行 npm install electron -D 指令后一直处于下载中状态,即使等几分钟甚至十几分钟还是处于下载中状态
5.2 问题产生的原因
与 问题二产生的原因 类似
6. 解决方法
经过多次询问 AI 和多次搜集网络资料后,我总结出四个方法解决 electron 下载失败的问题
6.1 使用魔法(不推荐)
第一个方法是使用网络代理(也就是魔法),但是经过本人实测,使用魔法之后下载 electron 之后依然失败
对魔法感兴趣的可以参考一下我的另一篇博文:GitHub的使用技巧(加速访问GitHub、查看GitHub的热门项目、查看GitHub推荐的项目、Fork、Issue、快速找到项目的安装包、GitHub的各种快捷键)
6.2 使用cnpm(不推荐)
第二个方法是使用 cnpm 下载 electron,但是使用 cnpm 下载的 electron 不是最新的,会比最新的 electron 落后几个版本(不推荐使用)
6.3 执行npm install指令时指定electron镜像源
第三个方法比较简单,就是执行npm install指令时指定electron镜像源(亲测有效)
npm install electron -D --registry=https://registry.npmmirror.com --electron_mirror=https://npmmirror.com/mirrors/electron/

6.4 在.npmrc文件中指定electron镜像源(推荐)
npmrc:npm 运行时配置文件(npm runtime configuration)
在项目根目录下创建一个名为 .npmrc 的文件
.npmrc

将以下内容内容复制到 .npmrc 文件中
electron_mirror=https://npmmirror.com/mirrors/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
更多推荐

所有评论(0)