Electron一些概念理解

前言

版本33.2.0

记录官方文档的一些初步理解

官方文档

自写demo: electron-demo 按钮点击发送http请求

主进程

一个Electron应用项目都会有一个主进程,启动入口

只有这个主进程,运行在Node.js环境中,可以require其他模块,用API

渲染器进程

每一个窗口都会有一个渲染器进程

这边我的理解是,就像一个html页面引入的一个普通js脚本

但是用上Electron的ipc通道API,就理解为是文档所说的一个渲染器进程

这里不能像主进程的js一样直接使用npm的模块

主进程的操作也不能直接渲染页面

主进程和渲染器进程交互

通信方式

通信方式 IPC通道

通过开发人员自己定义的"通道"来传递信息

在Electron框架中,涉及两个模块ipcMainipcRenderer

本身主进程和渲染器进程是相互隔离的

通过写一个preload.js (用来定义通道接口)(这个由主进程加载,因此可以调用API)

然后渲染器进程可以通过这个通道接口,与主进程交互,主进程中调用API操作

模式1: 渲染器进程到主进程(单向)

复制代码
// preload.js
const { contextBridge, ipcRenderer } = require('electron/renderer')

contextBridge.exposeInMainWorld('electronAPI', {
  setTitle: (title) => ipcRenderer.send('set-title', title)
})

渲染器进程调用这个接口, 会将title发给主进程

复制代码
window.electronAPI.setTitle(title)

上面用ipcRenderer.send 发送,主进程那边用ipcMain.on接收消息

文档提到了以前Electron 7的时候,ipcRenderer.send也可以用异步双向通信

模式2: 渲染器进程到主进程(双向)

复制代码
// preload.js
const { contextBridge, ipcRenderer } = require('electron/renderer')

contextBridge.exposeInMainWorld('electronAPI', {
  openFile: () => ipcRenderer.invoke('dialog:openFile')
})

渲染器进程使用,await等待主进程的返回

复制代码
const filePath = await window.electronAPI.openFile()

通过ipcRenderer.invokeipcMain.handle 搭配使用

其他

ipcRenderer.send也支持异步双向通信,但后续可能会被丢弃,不建议这样使用

相关推荐
threerocks24 分钟前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
徐小夕34 分钟前
3分钟从想法到Agent上线:我们开源了一款AI可视化工作流“IDE”
前端·算法·github
ly76892 小时前
JavaScript 从入门到进阶:核心语法、异步编程与工程化实践
开发语言·javascript·ecmascript
why技术3 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端
excel3 小时前
记录升级 nuxt3 到 nuxt4 记录
前端
剑胆琴心静水深流3 小时前
全栈之路6---web集成与呈现
前端·vue.js·spring boot·分布式·spring·前端框架·npm
前端snow3 小时前
ai agent -- Memory汇总
前端
ITresearchGuest4 小时前
AI 焦虑下,前端该何去何从
前端·人工智能
沙盘客4 小时前
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送
java·javascript·经验分享
Codiggerworld4 小时前
Chrome DevTools 隐藏神技:这 5 个调试技巧你可能从来没用过
前端·chrome·chrome devtools