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

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 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.mzph.cn/news/112167.shtml

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

相关文章

Apollo中的身份验证与授权:保护你的数据

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

模拟器-雷电-使用adb push或adb pull操作文件

一、环境 windows 10 雷电模拟器4.0.83 二、问题 有时候我们会需要往模拟器拷贝文件或者复制文件到我的电脑 三、方法 1、获取root权限 adb root adb remount 有可能遇到【daemon not running; starting now at tcp:5037】的报错 查看端口占用进程:netstat -…

Linux--进程终止

1.进程退出场景 进程退出场景只有三种: 代码运行完毕,结果正确代码运行完毕,结果错误代码在运行期间异常中断,退出进程 比如:对于错误的进程,可以通过不同的返回值来确定,什么是错误码呢&#x…

腾讯云 CODING 快速应用中心,让您 10 分钟轻松玩转 AIGC

点击链接了解详情 前言 AI 时代已经到来,与其说这是一个技术变革,不如说这是对我们工作和生活方式的全面升级。很多人已经听说过 Stable Diffusion AI 绘图和 Meta 公司推出的免费大语言模型 Llama 2,它们代表了当今最前沿的技术水平。但对于…

idea2023配置maven

看过【黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven】https://www.bilibili.com/video/BV1Ah411S7ZE?p9&vd_sourceedf9d91e5a0a27db51e3d6d4b9400637 配置的,前提要素配置也在这个课程里有啦&…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-[4]客户端与服务端连接

红队专题 招募六边形战士队员服务端编写新建工程server函数创建主线程类获取配置信息运行command 命令头文件里创建引用win32 类库/头文件startsocket 开始监听 类函数添加类StartSocketmysend/myrecv 设置 m_sockCommon 头文件MSGINFO_S 结构体 ThreadMain头文件runflag 启动 …

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

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

数据挖掘原理与算法

一、什么是闭合项集? Close算法对Apriori算法的改进在什么地方? 闭合项集:就是指一个项集x,它的直接超集的支持度计数都不等于它本身的支持度计数。 改进的地方: 改进方向: 加速频繁项目集合的生成,减少数据库库的扫…

【SA8295P 源码分析 (三)】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…

大模型、实时需求推动湖仓平台走向开放

大模型、实时需求高涨 AGI 时代,以 ChatGPT、Midjourney 等为代表的大模型迅速应用加速了 AI 普及,越来越多的企业选择搭建自己的 AI 基础设施,训练行业大模型。 另一方面,企业为了在瞬息万变的市场环境中更快的做出商业决策&…

【C++】命名空间和using namespace std的注意事项

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

分享一下怎么开发一个陪诊小程序

开发一个陪诊小程序需要综合考虑许多方面,包括但不限于市场需求、用户体验、技术实现和运营策略。以下是一篇以开发陪诊小程序为主题的文章。 一、背景介绍 随着社会的发展和人口老龄化的加剧,越来越多的老年人、病患和孕妇需要就医,而由于各…

【分布式】入门级NCCL多机并行实践 - 02

# 背景知识 大模型和分布式训练对数据的吞吐量以及并行度都有很高的要求,NCCL就是在这个背景下诞生的。 如果你是一个只会写写Python,调用PyTorch和Horovod的算法萌新,可能对于分布式底层的东西不太了解,在下岗热潮中被主管逼着…

Java并发面试题:(七)ThreadLocal原理和内存泄漏

ThreadLocal是什么? ThreadLocal是线程本地存储机制,可以将数据缓存在线程内部。ThreadLocal存储的变量在线程内共享的,在线程间又是隔离的。 ThreadLocal实现原理? ThreadLocal的底层是ThreadLocalMap,每个Thread都…

Open3D(C++) 最小二乘拟合平面(拉格朗日乘子法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 设拟合出的平面方程为: a x + b y + c

SpringCloud:自定义skywalking链路追踪

一、添加依赖&#xff1a; <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.7.0</version></dependency><dependency><groupId>org.apache.sk…

Mac Intellij Idea get/set方法快捷键

Control Retrun(回车键) Command n 参考&#xff1a; Mac Intellij Idea get/set方法快捷键-CSDN博客

Cornerstone for Mac:高效SVN管理的黄金标准

在当今的软件开发领域&#xff0c;版本控制系统是不可或缺的一部分。其中&#xff0c;Subversion&#xff08;SVN&#xff09;是一个广泛使用的版本控制系统&#xff0c;有助于团队协同工作&#xff0c;实现代码的版本管理和追踪。对于Mac用户来说&#xff0c;Cornerstone是一款…

【Linux】进程概念与进程状态

文章目录 一、进程概念1.进程的概念2.进程的描述-PCB 二、进程相关的基本操作1.组织进程2.查看进程3.结束进程4.通过系统调用获取进程标示符5.通过系统调用创建进程-fork初识 三、进程状态1.普遍操作系统层面的进程状态2.Linux操作系统的进程状态 四、两种特殊的进程状态1.僵尸…

C++ 01.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是用汇编语言编写的随着UNIX系统的发展&#xff0c;汇编语言的开发效率成为瓶颈&#xff0c;所以需要一个新的语言替代汇编语言1971年通过对B语言改良&#xff0c;使其能直接产生机器代码&#xff0c;C语言诞生UNIX使用C语言重写&#xff0c;同时…