彻底解决 node/npm, Electron下载失败相关问题, 从底层源码详解node electron 加速配置
最近玩了一下electron项目, 总是会遇到electron的下载失败问题, 于是看了一下node源码, 做一个记录.
node/npm 加速配置
这个配置通过设置node配置里面的registry 这个配置项来完成加速. 配置方法
npm config set registry https://registry.npmmirror.com
上面的命令就是将当前的npm命令的registry设置为阿里的这个npm镜像.
当然,如果你还想自定义node的其他的配置, 可以通过 命令 npm config edit 来对所有的npm的可配置项进行自定义, 如下图所示, 下面的这个项目就是我们通过上面的命令自动配置上去的.
这个些配置信息,实际上是保存在了我们用户目录下的 .npmrc 文件里面, 当然, 如果你觉得命令行不习惯,你也可以直接编辑这个文件,如果不存在直接创建这个文件然后编辑即可. 注意这个文件中 以 ; 开头的内容为注释信息
Electron下载加速配置
这个配置较为丰富, 我们先来看一下electron源码里面关于下载地址的拼接是如何完实现的吧. 这个下载相关逻辑的文件位于 node_modules/electron-download/lib/index.js
最后的下载URL地址是这样拼接的:
get url () {
return process.env.ELECTRON_DOWNLOAD_OVERRIDE_URL ||
`${this.baseUrl}${this.middleUrl}/${this.urlSuffix}`
}
从上面的代码 process.env.ELECTRON_DOWNLOAD_OVERRIDE_URL 我们可以看出,这个下载地址我们是可以通过一个环境配置项 ELECTRON_DOWNLOAD_OVERRIDE_URL 来直接覆盖版本等的拼接,不过这个一般用不上,因为我们要下载的electron一般都会带上版本.
后面的 `${this.baseUrl}${this.middleUrl}/${this.urlSuffix}` 这3个部分就是最终的下载URL的拼接地址, 从这里我们可以看出, 这里的:
baseUrl 就是我们要配置的加速地址,且后面必须要带上 /
middleUrl 这个是加速地址后面的那一部分,一般是版本信息, 这个对于阿里或者华为的加速地址是可以省略不配置的
urlSuffix 这个部分是由electron自动生成的最终要下载的文件名,如 electron-v4.2.12-darwin-x64.zip 这个也不需要我们配置,它会更加当前版本和系统平台自动生成.
electron url下载地址生成逻辑
了解了url地址的拼接, 让我们再来看看上面3部分的生成逻辑
从上图中我们就可以清晰的看出electron下载url中的各个部分的拼接逻辑,从而就知道了应该如何配置加速地址和相关的下载配置了.
process.env.XXX 这类的配置属于环境配置, 大写的属于系统环境配置项,我们需要在系统环境配置文件中进行,如 .zshrc .bash_profile等
# electron加速镜像地址 注意阿里的镜像只有9.x以上版本的electron
# ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"
ELECTRON_MIRROR="https://mirrors.huaweicloud.com/electron/"
这类的系统环境配置后需要使他生效: source ~/.zshrc
注意阿里的electron只有新版本,旧版本没有, 建议使用华为加速
https://mirrors.huaweicloud.com/electron/
https://registry.npmmirror.com/-/binary/electron/