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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/874342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打破界限,自闭症寄宿学校带给孩子的改变

在社会的广阔画卷中,有一群特别的孩子,他们以独特的视角感知世界,以非凡的方式表达情感,他们就是自闭症儿童。自闭症,这个听起来略带神秘色彩的词汇,实则承载着无数家庭的期盼与挑战。在这片充满爱的土地上…

C++设计模式——Iterator迭代器模式

一,迭代器模式的定义 迭代器模式是一种行为型设计模式,它使得遍历一个容器对象中的元素变得更加简单。 迭代器模式将遍历操作从容器对象(如集合、列表)中分离出来,它通过迭代器对象来遍历容器对象中的元素&#xff0…

RK3568平台开发系列讲解(PWM篇)使用 sysfs 接口操作 pwm

🚀返回专栏总目录 文章目录 一、查看 pwm 设备信息二、使用 sysfs 操作 PWM沉淀、分享、成长,让自己和他人都能有所收获!😄 PWM 子系统被划分为了三个层次, 分别为用户空间、 内核空间和硬件层, 内核空间包括 PWM 设备驱动层、 PWM 核心层和 PWM 适配器驱动层 一、查看…

JS面试真题 part3

JS面试真题 part3 11、bind、call、apply区别?如何实现一个bind12、JavaScript中执行上下文和执行栈是什么13、说说JavaScript中的事件模型14、解释下什么是事件代理?应用场景?15、说说你对闭包的理解?闭包使用场景 11、bind、cal…

分布式技术概览

文章目录 分布式技术1. 分布式数据库(Distributed Databases)2. 分布式文件系统(Distributed File Systems)3. 分布式哈希表(Distributed Hash Tables, DHTs)4. 分布式缓存(Distributed Caching…

面向对象需求分析

1. 面向对象分析概述 1.1 面向对象基本概念 以对象为中心,以类为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 1.2 UML统一建模语言 为什么要使用UML UML基本概念 统一建模语言(UML)是一个支持模型化和软…

【电子通识】半导体工艺——刻蚀工艺

在文章【电子通识】半导体工艺——光刻工艺中我们讲到人们经常将 Photo Lithography(光刻)缩写成 Photo。光刻工艺是在晶圆上利用光线来照射带有电路图形的光罩,从而绘制电路。光刻工艺类似于洗印黑白照片,将在胶片上形成的图像印…

opencv之图像梯度

图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计…

首批通过!华为云CodeArts Snap智能开发助手通过可信AI智能编码工具评估,获当前最高等级

近日,华为云CodeArts Snap智能开发助手在中国信通院组织的智能编码工具首轮评估中,最终获得4级评级, 成为国内首批通过该项评估并获得当前最高评级的企业之一。 此次评估以《智能化软件工程技术和应用要求 第2部分:智能开发能力》为依据&…

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录 这次是装实体机,一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …

Leetcode面试经典150题-55.跳跃游戏

解法都在代码里,不懂就留言或者私信 class Solution {public boolean canJump(int[] nums) {/**如果就一个位置,你本来就在这,肯定可以跳到*/if(nums.length 1) {return true;}/**这个题的解题思路是遍历数组,如果当前位置不在之…

每日OJ_牛客_数组中出现次数超过一半的数字

目录 牛客_数组中出现次数超过一半的数字 解析代码1 解析代码2 牛客_数组中出现次数超过一半的数字 数组中出现次数超过一半的数字__牛客网 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为…

RP2040 C SDK clocks时钟源配置使用

RP2040 C SDK clocks时钟源配置使用 🌿RP2040时钟源API函数文档:https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#group_hardware_clocks 🍁RP2040时钟树: 系统时钟源可以来自外部时钟输入(exte…

程序员如何写笔记并整理资料?

整理笔记 word。没错,我也看了网上一大堆软件,还有git管理等等。个人认为如果笔记只是记录个人的经验积累,一个word就够了,那些notepad,laTex个人觉得不够简练。word。 1.word可以插入任何文件附件(目前最大的word 20…

9.9(QT Day 2)

将day1做的登录界面升级优化【资源文件的添加】 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义…

面试题复习(0902-0909)

1. 完全背包问题 和01背包唯一的区别是&#xff0c;每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09; 代码和01唯一的区别在于j的循环是从小到大&#xff0c;不是从大到小。ij谁在外谁在内层区别不大。 #include <bits/stdc.h> using namespace std…

国产化数据库挑战及发展趋势

非国产数据库如Oracle、MySQL和MSSQL等在某些领域占据重要地位&#xff0c;但国产数据库的市场份额正在逐步提升&#xff0c;特别是在政策支持和市场需求的双重推动下&#xff0c;国产数据库的替代进程正在加速。 一、国产数据库市场规模 2024年中国数据库市场规模预计为543.1亿…

【树和二叉树的相关定义】概念

1.回顾与概览 2.什么是树型结构 3.树的&#xff08;递归&#xff09;定义与基本术语 3.1树的定义 注意&#xff1a;除了根结点以外&#xff0c;任何一个结点都有且仅有一个前驱 3.2树的其他表示方式 3.3树的基本术语 结点&#xff1a;数据元素以及指向子树的分支根结点:非空…

AI基础 L16 Logic Agents I

What is an Agent? • The main point about agents is they are autonomous: capable of acting independently, exhibiting control over their internal state • Thus: an agent is a computer system capable of autonomous action in some environment in order to mee…

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端&#xff0c;一般来说需要版本检测和自动更新功能&#xff0c;这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤&#xff1a; 读取本地应用版本拉取远程版本并比较两个版本如果需要升级&…