Electron(一)

前言: 参考尚硅谷视频记录:b站尚硅谷视频-1小时上手electron

一、什么是electron?

是一款应用广泛的、跨平台的、桌面应用开发框架。

  • 应用广泛:很多桌面应用都是这个框架写的,例如腾讯qq、百度云
  • 跨平台:跨window、mac、Linux这三大系统

二、electron的进程

main.js主进程使用Node api跟各个页面之间双向通信(ipc),同时使用native api实现操作的兼容

比如:主进程发出执行a,要想window、mac、linux都能听懂,就需要native api翻译一下

三、搭建工程

可参考:快速入门 | Electron

1、安装node

在Node官网下载安装即可,最好是最新的版本

2、初始化项目

package.json配置文件里会出现下图,注意:作者和描述是必填的

3、安装electron

npm install --save-dev electron
//或者
npm install electron -D

如果安装报错,可以试试用淘宝镜像来安

cnpm i electron

4、打印hello world

在package.json里添加运行指令

新建一个入口文件main.js,就可以测试下能否正常打印了

四、案例实战

可参考BrowserWindow | Electron

1、远程页面窗口

写一个可以展示远程页面的窗口

2、本地页面

新建个本地页面,然后在main.js里挂上去就好

const { app, BrowserWindow } = require('electron');const createWindow = () => {const win = new BrowserWindow({width: 800,//窗口宽度height: 600,//窗口高度autoHideMenuBar: true,//隐藏默认菜单栏})win.loadFile('./pages/index/index.html')
}app.on('ready', () => {createWindow()
})

备注:关于CSP的详细说明:MDN内容安全策略详解 、Electron安全策略规范

//可以解决安全策略警告问题,记得在html里加上
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

3、多系统兼容窗口生命周期

因为关闭窗口操作,对于不同系统有不同的规则。

  • window和Linux,关闭所有窗口时会退出应用
  • macOS 应用通常即使在没有打开任何窗口的情况下也继续运行,并且在没有窗口可用的情况下激活应用时会打开新的窗口

所以需要配置以下代码

//window && linux
//若果是非macOs系统,页面全部关闭时就退出应用
app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit()
})
//macOs
//这里的whenReady写法和前面的on ready一样
app.whenReady().then(() => {createWindow()//当应用启动,且没有页面时,则打开一个新页面app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})

4、热更新nodemon

每次保存后就自动热更新页面,配置如下:

//安装nodemon
cnpm i nodemon -D
//重写package.json里的start"scripts": {"start": "nodemon --exec electron ."},

添加一个nodemon文件

自此就可以利用nodemon,完成保存时刷新页面啦。

5、认识preload

什么是preload?还记得前面的electron进程图吗?preload(预加载文件)也就是主进程node和渲染进程(html+js+css页面)之间双向通信的那个ipc,是二者之间的桥梁

什么情况需要使用preload呢?

例如,render里需要访问process时,process是node主进程的参数,render渲染进程无法直接访问,就需要通过preload传递

主进程和预加载脚本通过webPreferences关联,而预加载进程通过设置类似全局参数把内容传给了渲染进程

注意:主进程和渲染进程是一对多的关系,主进程、预加载脚本、渲染进程依次加载

五、进程通信

1、渲染进程 => 主进程

借案例来理解,要求从渲染进程页面输入文字后,点击存入按钮,输入内容通过主进程存储到D盘

效果如下

添加代码如下

2、主进程 <=> 渲染进程

例如,渲染进程告知主进程要读取的指令,主进程将信息传递给渲染进程,实现了双向的沟通

效果如下:

参考上面的添加代码

render.js

const btn3 = document.getElementById("btn3")btn3.onclick = async() => {//获取主进程传过来的文件信息const res = await myAPI.readFile()alert(res)
}

main.js

//读取文件
function readFile() {const res = fs.readFileSync("D:/hello.txt").toString()return res
}//关键字关联preload读取操作
ipcMain.handle('file-read', readFile)

preload.js

readFile() {return ipcRenderer.invoke('file-read')}

3、主进程 => 渲染进程

类似于1

主进程,用win.webContens.send('信道','数据')发出数据

渲染进程,用ipcRender.on('信道','回调') 接收数据

//main.js
function createWindow(){win.webContents.sernd('message','你好吗?')
}//preload.js
contextBrige.exposeInMainWorld('myApi',{getMessage:(callback) => {return ipcRender.on('message',callback);}
})

六、打包

方法一

失败了,视频中使用electron-builder打包

1、安装electron-builder

cnpm install electron-builder -D

2、添加builder配置

3、运行命令打包

npm run build

然后就打包失败了,原因是因为github访问失败

方法二

参考electron官网:打包您的应用程序 | Electron

npm install --save-dev @electron-forge/cli
npx electron-forge import
npm run make

打包后的文件,在根项目下的out文件夹里

七、框架

electron已经集成了框架,比如electron-vite,开箱即用支持react和vue,很方便

可以多多看下,并运用

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

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

相关文章

AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)

开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…

ssti刷刷刷

[NewStarCTF 公开赛赛道]BabySSTI_One 测试发现过滤关键字&#xff0c;但是特殊符号中括号、双引号、点都能用 可以考虑拼接或者编码&#xff0c;这里使用拼接 ?name{{()["__cla"~"ss__"]}}?name{{()["__cla"~"ss__"]["__ba&…

google-Chrome常用插件

google-Chrome常用插件 1. json格式化展示插件 github下载jsonview-for-chrome插件 通过离线安装方式 拓展程序-》管理拓展程序-》打开开发者模式-》加载已解压的拓展程序-》选择拓展程序解压的位置 2. 翻译插件 插件下载地址&#xff1a;Immersive Translate - Bilingual …

基于redis实现分布式锁方案实战

分布式锁的进阶实现与优化方案 作为Java高级开发工程师&#xff0c;我将为您提供更完善的Redis分布式锁实现方案&#xff0c;包含更多生产级考量。 1. 生产级Redis分布式锁实现 1.1 完整实现类&#xff08;支持可重入、自动续约&#xff09; import redis.clients.jedis.Je…

XML简要介绍

实际上现在的Java Web项目中更多的是基于springboot开发的&#xff0c;所以很少再使用xml去配置项目。所以我们的目的就是尽可能快速的去了解如何读懂和使用xml文件&#xff0c;对于DTD&#xff0c;XMLSchema这类约束的学习可以放松&#xff0c;主要是确保自己知道这里面的大致…

UI自动化测试中,一个完整的断言应所需要考虑的问题

在UI自动化测试中,一个完整的断言应全面覆盖用户界面(UI)的功能性、交互性和视觉正确性。以下是断言需要包含的核心内容及详细说明: 一、基础元素验证 存在性断言 验证元素存在于DOM中示例代码(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…

[Java][Leetcode middle] 238. 除自身以外数组的乘积

第一个想法是&#xff1a; 想求出所有元素乘积&#xff0c;然后除以i对应的元素本书&#xff1b;这个想法是完全错误的&#xff1a; nums[I] 可能有0题目要求了不能用除法 第二个想法是&#xff1a; 其实写之前就知道会超时&#xff0c;但是我什么都做不到啊&#xff01; 双…

5.16本日总结

一、英语 背诵list30&#xff0c;复习list1 二、数学 学习14讲部分内容&#xff0c;订正30讲13讲题目 三、408 学习计网5.3知识点&#xff0c;完成5.1&#xff0c;5.2题目并订正 四、总结 高数对于基本定义概念类题目掌握不好&#xff0c;做题时往往不会下手&#xff0c…

深度学习---常用优化器

优化器一&#xff1a;Adam&#xff08;Adaptive Moment Estimation&#xff09; 一、适用场景总结&#xff08;实践导向&#xff09; 场景是否推荐用 Adam说明小模型训练&#xff08;如 MLP、CNN&#xff09;✅✅✅稳定、无需复杂调参&#xff0c;适合快速实验初学者使用或结构…

SparkSQL 连接 MySQL 并添加新数据:实战指南

SparkSQL 连接 MySQL 并添加新数据&#xff1a;实战指南 在大数据处理中&#xff0c;SparkSQL 作为 Apache Spark 的重要组件&#xff0c;能够方便地与外部数据源进行交互。MySQL 作为广泛使用的关系型数据库&#xff0c;与 SparkSQL 的结合可以充分发挥两者的优势。本文将详细…

基于对抗性后训练的快速文本到音频生成:stable-audio-open-small 模型论文速读

Fast Text-to-Audio Generation with Adversarial Post-Training 论文解析 一、引言与背景 文本到音频系统的局限性&#xff1a;当前文本到音频生成系统性能虽佳&#xff0c;但推理速度慢&#xff08;需数秒至数分钟&#xff09;&#xff0c;限制了其在创意领域的应用。 研究…

AI画图Stable Diffusion web UI学习笔记(中)

本文记录讲解AI画图工具Stable Diffusion web UI的部分基本使用方法&#xff0c;以便进行学习。AI画图Stable Diffusion web UI学习笔记分为上、中、下三篇文章。 我在 AI画图Stable Diffusion web UI学习笔记&#xff08;上&#xff09;_webui-CSDN博客 这篇文章中介绍了Stabl…

安全与智能的双向奔赴,安恒信息先行一步

人类文明发展的长河中&#xff0c;每一次技术变革都重新书写了安全的定义。 从蒸汽机的轰鸣到电力的普及&#xff0c;从互联网的诞生到人工智能的崛起&#xff0c;技术创新与变革从未停止对于安全的挑战。今天&#xff0c;我们又站在一个关键的历史节点&#xff1a;AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版软件设置与介绍

文章目录 一、如何设置中文二、如何设置界面分区三、如何切换二三维窗口四、工具栏有多个视图选项卡RealityCapture是虚幻引擎旗下一款三维建模软件,跟我们常用的三维建模软件一样,可以从图像或激光扫描中创建实景三维模型和正射影像等产品。可用于建筑、测绘、游戏和视觉特效…

真题卷001——算法备赛

蓝桥杯2024年C/CB组国赛卷 1.合法密码 问题描述 小蓝正在开发自己的OJ网站。他要求用户的密码必须符合一下条件&#xff1a; 长度大于等于8小于等于16必须包含至少一个数字字符和至少一个符号字符 请计算一下字符串&#xff0c;有多少个子串可以当作合法密码。字符串为&am…

17.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines

本实例主要讲解内容 这个Three.js示例展示了如何使用BufferGeometry创建大量线段&#xff0c;并通过**变形目标(Morph Targets)**实现动态变形效果。通过随机生成的点云数据&#xff0c;结合顶点颜色和变形动画&#xff0c;创建出一个视觉效果丰富的3D线条场景。 核心技术包括…

InfluxDB 2.7 连续查询实战指南:Task 替代方案详解

InfluxDB 2.7 引入了 Task 功能&#xff0c;作为连续查询&#xff08;CQ&#xff09;的现代替代方案。本文详细介绍了如何使用 Task 实现传统 CQ 的功能&#xff0c;包括语法解析、示例代码、参数对比以及典型应用场景。通过实际案例和最佳实践&#xff0c;帮助开发者高效迁移并…

Pytorch张量和损失函数

文章目录 张量张量类型张量例子使用概率分布创建张量正态分布创建张量 (torch.normal)正态分布创建张量示例标准正态分布创建张量标准正态分布创建张量示例均匀分布创建张量均匀分布创建张量示例 激活函数常见激活函数 损失函数(Pytorch API)L1范数损失函数均方误差损失函数交叉…

大模型在数据分析领域的研究综述

大模型在业务指标拆解中的应用场景与方法研究 随着人工智能技术的快速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;在数据分析领域的应用日益广泛。尤其是在业务指标拆解这一复杂任务中&#xff0c;大模型展现了其独特的价值和潜力。通过对多维…

JAVA:ResponseBodyEmitter 实现异步流式推送的技术指南

1、简述 在许多场景下,我们希望后端能够以流式、实时的方式推送数据给前端,比如消息通知、日志实时展示、进度条更新等。Spring Boot 提供了 ResponseBodyEmitter 机制,可以让我们在 Controller 中异步地推送数据,从而实现实时流式输出。 样例代码:https://gitee.com/lh…