【electron】实战技巧(持续更新,不要错过喔)

news2024/11/6 11:32:55

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ nvm处理多node环境
      • 避免node版本切换
      • 指定32位/64位
    • 2️⃣ 常用node库
      • npm-run-all(脚本运行工具)
      • cross-env(配置环境变量)
      • dotenv(配置文件)
      • minimist(命令行解析)
      • listr2
    • 3️⃣ electron命令行
      • chrome命令行
      • 自定义命令行
    • 4️⃣ electron-builder
      • 不编译nsis
      • 不编译asar
    • 5️⃣ TODO:分发(升级)
      • TODO
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

需求

使用electron过程中,经常遇到各种问题,有些解决过,时间长了又忘掉了,特此记录。

开发环境

版本号描述
文章日期2023-10-20
操作系统Win11 - 21H2 - 22000.1335
nvm1.1.11

1️⃣ nvm处理多node环境

NVM(Node Version Manager)是一个用于在不同项目中管理多个 Node.js 版本的工具。它可以让你在不同的项目中使用不同的 Node.js 版本,而不需要在系统中安装多个版本的 Node.js。NVM 能够通过管理系统中多个版本的 Node.js 来帮你解决版本冲突的问题。
使用说明,可以参考文章《【nvm】【node多版本管理工具】使用说明和踩坑https://blog.csdn.net/kinghzking/article/details/126186648》。

避免node版本切换

  • 问题:
    开发过程中经常遇到项目使用的版本不一致(版本16.16.0和18.16.0等,32和64位),导致经常切换的情况。
    如果不切换,会因版本不一致,出现各种错误信息。
  • nvm原理:
    如何做到不切换又保证使用正确的node版本呢?
    我们先了解下nvm的原理,下面图中可以看出,nvm巧妙的使用快捷方式实现各个版本的切换!!!
    所以,我们如果能让我们的环境直接指定到nvm下的目录,就可以不再切换版本了。
    在这里插入图片描述
  • 方案:
    执行命令前通过set PATH=修改环境路径,示例:set PATH=%APPDATA%\\nvm\\v18.16.0\\node.exe;%PATH% && electron ."

  • 为了避免重复代码,可以将set PATH=设置为一条命令(如setNode32),然后执行别的命令前通过npm run setNode32或者npm-run-all setNode32等命令执行一次路径设置,如下图所示:
    在这里插入图片描述

指定32位/64位

nvm安装命令为:nvm install [version] [arch],其中arch就是指定32位还是64位的
例如:

  • nvm install 18.16.0 安装node v18.16.0 ,未指定arch时,根据系统位数安装不同的版本。
  • 如果64位电脑需要安装32位的, 则运行:nvm install 18.16.0 32

2️⃣ 常用node库

electron开发环境一般都是vscode+node,其实就是node开发的常用库,这里列举一些好用的库,很多项目都会使用到的。

npm-run-all(脚本运行工具)

这个工具是为了解决官方的 npm run 命令无法同时运行多个脚本的问题,它可以把诸如 npm run clean && npm run build:css && npm run build:js && npm run build:html 的一长串的命令通过 glob 语法简化成 npm-run-all clean build:* 这样精致小巧的模样。

安装:

  • npm install npm-run-all --save-dev

这个包提供三个命令,分别是 npm-run-all run-s run-p,其中后两个都是 npm-run-all 带参数的简写,分别对应串行和并行。

  • 顺序执行:npm-run-all clean lint build
  • 并行执行:npm-run-all --parallel lint build
  • 也可以混合执行,如:npm-run-all a b --parallel c d --sequential e f --parallel g h i

cross-env(配置环境变量)

cross-env 是一个 Node.js 模块,用于在不同的环境中管理运行时变量。例如,通过 cross-env,你可以在生产环境中设置不同的环境变量,而在开发环境中设置不同的环境变量。使用 cross-env,你可以在代码中方便地设置环境变量,而不需要手动在命令行中设置它们。

例如,你可以使用以下命令设置环境变量:
cross-env NODE_ENV=production node app.js
此命令将设置环境变量 process.env.NODE_ENV 为 production,然后运行 app.js 脚本。

下面示例,表示不同的BUILD_TARGET运行node命令:
在这里插入图片描述

dotenv(配置文件)

dotenv是一个零依赖模块,它将环境变量从 .env 文件加载到 process.env 中。dotenv提供许多的方法,最常用的是dotenv.config()
dotenv.config()读取一个.env文件,解析其内容,将.env文件中声明的环境变量合并进process.env,然后返回一个对象result。result.parsed是解析出的内容,result.error是在解析失败的时候返回的一个标识。 通常我们只需要进行dotenv.config() 操作,不需要关心result。

下面是配置(.env)示例代码运行结果示例:
在这里插入图片描述

minimist(命令行解析)

node.js的命令行参数解析工具有很多,比如:argparse、optimist、yars、commander。
optimist和yargs内部使用的解析引擎正是minimist,如果你喜欢轻量级的技术,那么minimist足够简单好用,代码量也很少(只有几百行),非常适合研读。

minimist的特性比较全面:

  • short options
  • long options
  • Boolean 和 Number类型的自动转化
  • option alias

简单示例:
node minimist.js lushuixi 16 --template vue --name --age=16 -f --price 2.5120

import minimist from 'minimist'

var argv = minimist(process.argv.slice(2));
console.log(argv);

/*
运行结果:
{
  _: [ 'lushuixi', 16 ],
  template: 'vue',
  name: true,
  age: 16,
  f: true,
  price: 2.512
}
*/

更多参数示例:
参数--sex如果指定了(不管后面有没有值),会解析为true
而参数--sanhaosheng未指定,被解析为了false

import minimist from 'minimist'

var argv = minimist([
    "lushuixi", "16", "--template", "vue", "--name", "--age=16", "--sex=女"
  ], {
    boolean: ["sanhaosheng"],
    "--": true, //
});
console.log('\n\n', argv);

/*
运行结果:

 {
  _: [ 'lushuixi', 16 ],
  sanhaosheng: false,
  template: 'vue',
  name: true,
  age: 16,
  sex: true,
  '--': []
}
*/

listr2

listr2 是一个易于使用的 Node.js 包,可以用来创建生动的、可以交互的 CLI 界面、任务列表。类似的库还有consola。
我们可以利用这个库实现自己的 CLI 、管理任务、优化控制台显示等。

贴一个官方的示例图,来便于理解:
在这里插入图片描述

下面编写个测试用例,看下效果:
在这里插入图片描述

import { Listr } from "listr2";

const tasks = new Listr([
  {
    title: "任务1  立即执行完成",
    task: () => {
      console.log("执行任务1");
    },
  },
  {
    title: "任务2  等待3s后才执行完成",
    task: () =>
      new Promise(resolve => {
        setTimeout(() => {
          console.log("执行任务2");
          resolve();
        }, 3000);
      }),
  },
  {
    title: "任务3  等待3s后才执行失败",
    task: () =>
      new Promise((resolve, reject) => {
        setTimeout(() => {
          console.log("执行任务3");
          reject();
        }, 3000);
      }),
  },
]);

tasks
  .run()
  .then()
  .catch(err => {});


3️⃣ electron命令行

chrome命令行

electron内部使用的chrome,支持大部分chrome的命令行,这里不再细数。

自定义命令行

一直以来都只使用过electron命令行只有electron .,最近需要指定某文件来启动脚本,所以研究了一波。
先看下运行electron会显示什么内容:
Usage: electron [options] [path]
在这里插入图片描述

从图中我们可以发现,其options可选项基本没啥用途(至少目前没用到过)。
path包含多种形式,直接传递文件名即可指定不同的入口文件了!!!

ps: --interactive感觉像是交互式的方式打开,类似python,可惜该选项不支持windows!!!,所以目前没测试该功能。

4️⃣ electron-builder

electron-builder作为官网推荐的打包工具,其功能十分复杂。这里只描述几个遇到的问题。

不编译nsis

编译过程中,出现下面的building过程,该过程及其耗时,最终编译出一个Setup.exe,这个在测试过程中毫无意义。
我们今天的目标就是取消该选项。
在这里插入图片描述

查看文档https://www.electron.build/configuration/win,可以看出target支持十几种类型:nsis, nsis-web (Web installer), portable (portable app without installation), appx, msi, squirrel, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir
其中最可疑的就是dir,我们修改它就不会编译nsis了。

不编译asar

还是上面的图,有一个asar的选项,被禁用掉了,这样也可以节省很多的编译时间。
如下图修改package.json中的build字段内容即可。
在这里插入图片描述

5️⃣ TODO:分发(升级)

electron自带有分发功能(Electron Forge),目前工作中都是自己编写更新功能,没使用自带的功能,以后有机会再看吧,应该会节省很多资源和时间。

TODO

🛬 文章小结

electron包罗万象,这里只是简单的总结了遇到的问题,有兴趣的同学可以自己多翻翻官方文档,会有以外收获喔。

📖 参考资料

  • 官网文档 https://www.electronjs.org/zh/docs/latest/
  • 【nvm】【node多版本管理工具】使用说明和踩坑 https://blog.csdn.net/kinghzking/article/details/126186648
  • nodejs环境变量 、.env文件以及dotenv的使用 https://juejin.cn/post/6993224664705138702#heading-8
  • 解析命令行参数第三方包之minimist https://juejin.cn/post/7160597511495745550#heading-19

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷月赛 P5588 小猪佩奇爬树

题目描述 佩奇和乔治在爬树。 给定 n 个节点的树 T(V,E)&#xff0c;第 i 个节点的颜色为 wi​&#xff0c;保证有1≤wi​≤n。 对于1≤i≤n&#xff0c;分别输出有多少对点对(u,v)&#xff0c;满足u<v&#xff0c;且恰好经过所有颜色为 i 的节点&#xff0c;对于节点颜色…

2023年【金属非金属矿山(地下矿山)安全管理人员】考试内容及金属非金属矿山(地下矿山)安全管理人员考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试内容根据新金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将金属非金属矿山&#xf…

leetcode分类刷题:如何更好地理解递归

文章目录 概念含义递归三要素递归算法的编程模型递归问题分类递归vs循环(迭代)参考文献 参考知乎上递归下的一个高赞回答&#xff0c;觉得写的非常好&#xff0c;挑选有助于自己理解的内容进行简单总结。 概念含义 1、递归(Recursion)是指在函数的定义中调用函数自身的方法&…

一篇文章教会你C++11入门知识点

C11入门 列表初始化1. {}初始化2. initializer_list 声明1. auto2. decltype3. nullptr 范围for循环STL新增容器1. array2. forward_list3. unordered_map和unordered_set 右值引用和移动语义1. 左值引用和右值引用2. 左值引用和右值引用比较3. 右值引用使用场景和意义4. 右值引…

16-spring AOP核心对象的创建

文章目录 1. aop的几个重要概念2. aop bean definition3. AspectJPointcutAdvisor4.AopConfigUtils5.AnnotationAwareAspectJAutoProxyCreator6. 循环依赖1. aop的几个重要概念 参考官方解释:https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-framework-r…

操作系统备考学习 day10

操作系统备考学习 day10 第三章 内存管理3.2 虚拟内存管理3.2.1 虚拟内存的基本概念传统存储管理方式的特征、缺点局部性原理虚拟内存的定义和特征如何实现虚拟内存技术 3.2.2 请求分页管理方式页表机制缺页中断机构地址变换机构 3.2.3 页面置换算法最佳置换算法&#xff08;OP…

总结一下vue中v-bind的常见用法

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;简述一下v-bind命令其它写法 &#x1f415;前言&#xff1a; 本篇博客主要总结一下v-bind命令在vue中的常见用法 &#x1f3e8;简述一下v-bind命令 v-bind命令是将动态的数据属性与咱们的标签进行一个绑定,它可以绑定标…

二维码智慧门牌管理系统:革新小区安全管理的新力量

文章目录 前言一、外采人员的数据采集二、二维码智慧门牌管理系统的创新性三、居民的便捷体验四、面临的挑战 前言 在科技快速发展的今天&#xff0c;智能化和数字化已经深刻影响着我们的生活的各个方面。近期备受关注的话题之一是二维码智慧门牌管理系统&#xff0c;这一系统…

缓存失效方案

一、背景 WRITE &#xff1a; 数据写入Mysql 和 Redis缓存&#xff0c; READ&#xff1a;先从 Redis 缓存中取数据&#xff0c;拿不到再从Mysql中加载&#xff0c;更新到Redis 上图第三阶段&#xff0c;接收Mysql的binlog变更消息&#xff0c;可以参考阿里的 Canal&#xff0…

tooltip里面画echarts图

第一步: 第二步; 完整代码: //协作工作受理分析圆柱形workLineChart(xData, yData) {let that this;let option {backgroundColor: "#061326",grid: {top: "10%",bottom: "5%",left: "5%",right: "5%",containLabel: true…

【C语言必知必会 | 子系列第一篇】深入剖析顺序结构(1)

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会子系列】第一篇&#xff0c;基于进行C语言顺序结构的选择题专项练习&#xff0c;结合专题优质题目&#xff0c;带领读者从0开…

软件测试01

一、认识软件及测试 1、什么是软件 控制计算机硬件工作的工具 2、软件的基本组成 页面客户端------请求----->代码服务器-------请求------>数据服务器 3、软件产生过程 需求产生------->需求文档------->设计效果图------->产品开发-------->产品测试 …

消失的它:网络层分片包中的第一个分片包去哪了?

在网络层IP包分片的过程中&#xff0c;遇到了大麻烦&#xff01; 主机A&#xff1a; IP地址&#xff1a;192.168.0.10/24 MAC地址&#xff1a;02:00:00:00:00:10 主机B&#xff1a; IP地址&#xff1a;192.168.0.20/24 MAC地址&#xff1a;02:00:00:00:00:20 MTU&#xff1a;1…

算法通过村第十五关-超大规模|黄金笔记|超大规模场景

文章目录 前言对20GB文件进行排序超大文本中搜索两个单词的最短距离从10亿数字中寻找小于100万个数字总结 前言 提示&#xff1a;你生命的前半辈子或许属于别人&#xff0c;活在别人的认为里。那把后半辈子还给自己&#xff0c;去追随你内在的声音。 --荣格 理解了前面的几个题…

13.Tensor Product:Vector - Covector Pairs

之前对于Tensor 的最好的定义&#xff1a; 需要注意的是&#xff1a;本文的一些内容使用的是非国际标准的符号&#xff0c;只是视频制作人的个人偏好。 如上图&#xff1a;张量是 使用张量积组合在一起的向量和协向量的集合。 所以&#xff0c;向量和协向量就像是所有其他张量…

外包干了2个月,技术退步太明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

网工内推 | 金融业,网络管理岗,CCIE优先,最高30k

01 国民养老保险 招聘岗位&#xff1a;网络管理岗 职责描述&#xff1a; 1.负责公司整体网络架构规划、设计&#xff0c;制定整体网络方案&#xff0c;完善网络拓扑架构标准化文档&#xff0c;对公司现有网络进行梳理及持续优化。 2.负责公司网络系统建设&#xff0c;建立具备…

15-bean生命周期,循环依赖

文章目录 1. bean生命周期 1. bean生命周期

前端学成在线项目详细解析一

学成在线项目 01-项目目录 网站根目录是指存放网站的第一层文件夹&#xff0c;内部包含当前网站的所有素材&#xff0c;包含 HTML、CSS、图片、JavaScript等等。 首页引入CSS文件 <!-- 顺序要求&#xff1a;先清除再设置 --> <link rel"stylesheet" hre…

Hexo搭建个人博客系列之环境准备

环境准备 Git Git官网&#xff0c;安装过程,就是一直下一步,详细的看这篇文章 Git的安装 Node.js Node.js官网 Node.js的安装 注册一个GitHub账号 安装hexo 新建一个文件夹(位置任意),运行cmd(若出现了operation not permitted,就以管理员的权限来运行cmd)&#xff0c;运行…