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)。它的安装过程分为两步:

  1. npm 先下载一个很小的 “installer” 脚本(日志里提到的 install.js
  2. 然后这个脚本会去 GitHub Releases 页面下载对应你系统的 Electron 二进制文件(electron.zipelectron.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/
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐