当前位置: 首页 > news >正文

彻底解决 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}`}

从上面的拼接逻辑我们可以看出,这个下载地址可以通过直接指定一个系统环境变量ELECTRON_DOWNLOAD_OVERRIDE_URL来指定下载地址 或者通过 `${this.baseUrl}${this.middleUrl}/${this.urlSuffix}` 来进行动态的拼接, 在我们平时的使用过程中第一种方式用得很少, 常用的是第二种 动态拼接的方式,  而我们所配置的electron加速地址也就是对这种动态拼接地址的各个部分进行配置, 以下我们就着重讲解一下这3部分构成, 了解了这3部分的构成我们就可以随心所欲的配置electron的加速地址了. 他们每一个部分的优先级是从上到下依次递减(这里也就是 js中 或操作的优先级, 从左到右执行, 左边的代码优先级高于右边的代码)

baseUrl 就是我们要配置的加速地址, 对于华为,阿里加速地址后面必须要带上 /  否则最后生成的url就不对了

 因为这2个加速最后的url是类似这样的https://mirrors.huaweicloud.com/electron/8.2.0/electron-v8.2.0-darwin-x64.zip 这里的红色部分就是我们配置的加速地址, 而第二部分的middleUrl就是版本信息, 第三部分是urlSuffix就是文件下载的名称. 

middleUrl 这个是加速地址后面的那一部分,一般是版本信息,既中间的那部分,  这个对于阿里或者华为的加速地址是可以省略不配置的,默认就是版本信息.

urlSuffix 这个部分就是我们要下载的文件名称, 一般情况由electron自动生成即可,如 electron-v4.2.12-darwin-x64.zip  这个也不需要我们配置,它会更加当前版本和系统平台自动生成. 

electron url下载地址生成逻辑

了解了url地址的拼接, 让我们再来看看上面3部分的生成逻辑的核心代码, 他们每一个部分的优先级从上到下(左到右)依次递减(这里也就是 js中 或操作的优先级, 从左到右执行, 左边的代码优先级高于右边的代码)

// ${this.baseUrl}部分的构成逻辑
return process.env.NPM_CONFIG_ELECTRON_MIRROR ||process.env.npm_config_electron_mirror ||process.env.npm_package_config_electron_mirror ||process.env.ELECTRON_MIRROR ||this.opts.mirror ||'https://github.com/electron/electron/releases/download/v'// ${this.middleUrl} 的构成逻辑
return process.env.NPM_CONFIG_ELECTRON_CUSTOM_DIR ||process.env.npm_config_electron_custom_dir ||process.env.npm_package_config_electron_custom_dir ||process.env.ELECTRON_CUSTOM_DIR ||

http://www.mrgr.cn/news/20662.html

相关文章:

  • 远程教育与学习:探索远程控制技术在教育领域的新机遇
  • SQL的高级查询练习知识点中(day25)
  • C++封装、继承和多态
  • 使用PowerShell检查Exchange服务状态:详细教程
  • 听故事学习 GAN
  • 智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)
  • Python 人脸识别实战教程
  • 华为OD机试 - 掌握单词个数(Python/JS/C/C++ 2024 D卷 100分)
  • js 对象中增加新的键值对
  • UVa1104/LA5131 Chips Challenge
  • Python | Leetcode Python题解之第387题字符串中的第一个唯一字符
  • CSS之我不会
  • Linux -动静态库
  • Python 文档注释规范详解
  • 【编程底层思考】JUC中CAS的底层操作系统的实现原理及ABA问题
  • 【有啥问啥】数据结构哈希链(Hash Chain)的详解与技术探讨
  • 对HashMap的理解
  • 「图::存储」链式邻接表|链式前向星(C++)
  • c++ 源文件 和 头文件 介绍
  • jQuery基础2-css的操作-事件-属性-Ajax-DOM操作