当前位置: 首页 > 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 ||

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【计算机组成原理】计算机系统层次结构
  • 代码随想录训练营day51|图论part2
  • 【React+Ts+Vite+AntDesign】从0到1基础项目搭建(动态路由)
  • 性能测试经典案例解析——远程培训系统
  • 傅里叶变换家族
  • Oracle Enterprise Manager:Oracle数据库管理的高效工具
  • 三菱机器人手柄维修示教器维修手操器面板等
  • 【Kubernetes知识点问答题】监控与升级 / ETCD 备份与恢复
  • df.write.csv
  • RK3399 android7.1 话柄电话功能
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3 深度学习详解 -2 机器学习框架攻略
  • 探索 Logrus 日志框架:Go 语言的强大日志工具
  • 【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题
  • 提高开发效率的实用工具库VueUse
  • OPenCV结构分析与形状描述符(4)计算一个旋转矩形的四个顶点的函数boxPoints()的使用
  • bearychat的java client
  • CSS 专业技巧
  • CSS实用技巧干货
  • CSS相对定位
  • golang中接口赋值与方法集
  • js如何打印object对象
  • js中forEach回调同异步问题
  • JS专题之继承
  • maya建模与骨骼动画快速实现人工鱼
  • MD5加密原理解析及OC版原理实现
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 程序员最讨厌的9句话,你可有补充?
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 思否第一天
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 移动端解决方案学习记录
  • 如何用纯 CSS 创作一个货车 loader
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • $$$$GB2312-80区位编码表$$$$
  • ()、[]、{}、(())、[[]]命令替换
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (k8s)Kubernetes本地存储接入
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (论文阅读40-45)图像描述1
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .net Application的目录
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net 程序发生了一个不可捕获的异常
  • .NET学习教程二——.net基础定义+VS常用设置
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @AliasFor注解
  • @test注解_Spring 自定义注解你了解过吗?
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节