使用vue3+vite+electron构建小项目介绍Electron进程间通信

简介: 使用vue3+vite+electron构建小项目介绍Electron进程间通信

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。


在 Electron 中,进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。


在本文中,我们使用vue3+vite+electron做演示,将介绍一些基本的 IPC 模式,并提供具体的示例。您可以将这些示例作为您应用程序代码的参考。


一、搭建项目
1、使用vite创建vue3项目
npm init vite
2、安装依赖
npm install
3、安装electron
npm install electron --save-dev
4、配置package.json
"main": "main.js",
"scripts": {
    "dev": "vite",
    "start": "electron ."
}


5、创建文件
  • main.js主进程文件
  • preload.js预加载脚本文件
6、启动vue项目和electron项目
npm run dev
npm run start
7、项目目录结构


二、主进程到渲染进程

从主进程发送到渲染器进程,指定一个渲染器接收消息。 消息通过 WebContents 实例发送到渲染器进程。


在下面的示例中,我们将在主进程创建一个菜单,点击菜单事件后,发送消息到渲染器进程,渲染器进程接受到消息后,做弹窗操作。

1、主进程页面
// main.js
const {app,BrowserWindow,Menu} = require('electron')
const path = require('path')
//主进程创建窗口方法
const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })
  //打开渲染页面
  win.loadURL('http://localhost:5173')
   //创建自定义菜单
  const template = [{
            label: '文件',
            submenu: [{
                    label: '新建',
                    accelerator: 'CmdOrCtrl+N',
                    click() {
          // 这里点击'新建'菜单向渲染进程发送消息
                        win.webContents.send('update-isShow')
                    }
                }
            ]
        }
    ]
    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
}
//在应用准备就绪时调用创建窗口方法函数
app.whenReady().then(() => {
  createWindow()
})
2、预加载脚本页面
// preload.js
const { contextBridge, ipcRenderer} = require('electron')
//桥接渲染进程与主进程的点击'新建'菜单方法
const openDialog = (callback) => {
    ipcRenderer.on('update-isShow', callback)
}
contextBridge.exposeInMainWorld('electronAPI', {openDialog})
3、渲染进程页面(具体的vue页面)
// renderer.js
// vue页面监听消息操作
window.electronAPI.openDialog(()=>{
 //...这里打开弹窗
})


三、渲染进程到主进程(双向)

从渲染器进程代码调用主进程模块并等待结果。 通过 ipcRenderer.invoke 与 ipcMain.handle 搭配使用来完成。


在下面的示例中,我们将从渲染器进程发送一个网址到主进程,主进程拿到网址,打开网址截屏,获取图片并返回图片路径。

1、渲染进程页面(具体的vue页面)
// renderer.js
// vue页面触发新增网站按钮事件
const handleSubmit = async () => {
    const result = await window.electronAPI.sendUrl(url)
    //拿到主进程返回的结果,做添加处理
    console.log(result)
}
2、预加载脚本页面
// preload.js
const { contextBridge, ipcRenderer} = require('electron')
//桥接渲染进程与主进程的新增网站方法
const sendUrl = async (url) => {
    const result = await ipcRenderer.invoke('get-url-event', url)
    return result
}
contextBridge.exposeInMainWorld('electronAPI', {sendUrl})
3、主进程页面
// main.js
const { ipcMain} = require('electron')
//主进程使用shell打开网站
ipcMain.handle('get-url-event', async (event, url) => {
    const result = await getSource(url)
    return result
})
//获取网站截屏图片
const getSource = (url) => {
    return new Promise((resolve, reject) => {
        //...这里处理逻辑,并返回结果
        resolve(base64)
    })
}


四、渲染进程到主进程(单向)

从渲染器进程发送到主进程,使用 ipcRenderer.send 发送消息,然后使用 ipcMain.on 接收。

在下面的示例中,我们将从渲染器进程发送一个网址到主进程,主进程拿到网址,打开网址。

1、渲染进程页面(具体的vue页面)
// renderer.js
// vue页面触发打开网站按钮事件
const handleOpen = (url) => {
    window.electronAPI.openUrl(url)
}


2、预加载脚本页面
// preload.js
const { contextBridge, ipcRenderer} = require('electron')
//桥接渲染进程与主进程的打开网站方法
const openUrl = (url) => {
    ipcRenderer.send('open-url-event', url)
}
contextBridge.exposeInMainWorld('electronAPI', {openUrl})


3、主进程页面
// main.js
const { ipcMain, shell} = require('electron')
//主进程使用shell打开网站
ipcMain.on('open-url-event', (event, url) => {
    shell.openExternal(url)
})


五、示例代码下载
1、项目介绍

通过vue3+electron实现一个基础的桌面端应用——收藏夹功能。使用了部分vue3的基本功能及方法,了解Electron的一下API的使用,开发中的常用的插件及依赖的使用方法。

  • pinia+localStorage数据持久化
  • unplugin-auto-import自动引入依赖
  • unplugin-vue-components自动引入组件
  • provide与inject组件间通信
  • electron进程间相互通信
  • element-plus构建UI界面


2、项目启动
  • 安装依赖
npm install
  • 启动vue项目
npm run dev
  • 启动electron项目
npm run start
3、项目截图

目录
相关文章
|
9天前
|
开发框架 缓存 前端开发
electron-builder 解析:你了解其背后的构建原理吗?
本文首发于微信公众号“前端徐徐”,详细解析了 electron-builder 的工作原理。electron-builder 是一个专为整合前端项目与 Electron 应用的打包工具,负责管理依赖、生成配置文件及多平台构建。文章介绍了前端项目的构建流程、配置信息收集、依赖处理、asar 打包、附加资源准备、Electron 打包、代码签名、资源压缩、卸载程序生成、安装程序生成及最终安装包输出等环节。通过剖析 electron-builder 的原理,帮助开发者更好地理解和掌握跨端桌面应用的构建流程。
31 2
|
1天前
|
开发框架 JavaScript 前端开发
Electron技术深度解析:构建跨平台桌面应用的利器
【10月更文挑战第13天】Electron技术深度解析:构建跨平台桌面应用的利器
7 0
|
1月前
|
消息中间件 Kafka 数据安全/隐私保护
Python IPC实战指南:构建高效稳定的进程间通信桥梁
【9月更文挑战第11天】在软件开发中,随着应用复杂度的提升,进程间通信(IPC)成为构建高效系统的关键。本文通过一个分布式日志处理系统的案例,介绍如何使用Python和套接字实现可靠的IPC。案例涉及定义通信协议、实现日志发送与接收,并提供示例代码。通过本教程,你将学会构建高效的IPC桥梁,并了解如何根据需求选择合适的IPC机制,确保系统的稳定性和安全性。
46 5
|
2月前
|
人工智能 PyTorch 算法框架/工具
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
【8月更文挑战第6天】Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
|
2月前
|
JavaScript 开发工具 git
Electron V8排查问题之构建时报错 "user32.lib is not found in LIB"如何解决
Electron V8排查问题之构建时报错 "user32.lib is not found in LIB"如何解决
36 1
|
2月前
|
容器 iOS开发 Linux
震惊!Uno Platform 响应式 UI 构建秘籍大公开!从布局容器到自适应设计,带你轻松打造跨平台完美界面
【8月更文挑战第31天】Uno Platform 是一款强大的跨平台应用开发框架,支持 Web、桌面(Windows、macOS、Linux)及移动(iOS、Android)等平台,仅需单一代码库。本文分享了四个构建响应式用户界面的最佳实践:利用布局容器(如 Grid)适配不同屏幕尺寸;采用自适应布局调整 UI;使用媒体查询定制样式;遵循响应式设计原则确保 UI 元素自适应调整。通过这些方法,开发者可以为用户提供一致且优秀的多设备体验。
79 0
|
2月前
|
前端开发 JavaScript API
强强联手打造桌面应用新标杆:Angular与Electron的完美融合——从环境搭建到通信机制,全面解析构建跨平台应用的最佳实践与技巧
【8月更文挑战第31天】随着Web技术的进步,开发者们越来越多地采用Web技术来构建桌面应用程序。通过结合使用开源框架Electron及前沿的前端框架Angular,开发者能充分利用JavaScript、HTML和CSS打造出高性能且易维护的跨平台桌面应用。本文将详细介绍如何搭建基于Angular与Electron的开发环境,包括创建Angular项目、安装Electron及相关依赖、配置Electron主进程以及实现Angular应用与Electron间的通信等关键步骤,并最终将应用打包成多平台可执行文件,为读者提供了一套完整的解决方案以快速入门并实践这一强大技术组合。
44 0
|
2月前
|
存储 XML Linux
深入理解操作系统:进程管理与调度策略探索安卓应用开发:从零开始构建你的第一个App
【8月更文挑战第28天】在数字世界里航行,操作系统是掌控一切的舵手。本文将带你领略操作系统的精妙设计,特别是进程管理和调度策略这两大核心领域。我们将从基础概念出发,逐步深入到复杂的实现机制,最后通过实际代码示例,揭示操作系统如何高效协调资源,确保多任务顺畅运行的秘密。准备好了吗?让我们启航,探索那些隐藏在日常电脑使用背后的奥秘。 【8月更文挑战第28天】在这个数字时代,拥有一款自己的移动应用程序不仅是技术的展示,也是实现创意和解决问题的一种方式。本文将引导初学者了解安卓开发的基础知识,通过一个简单的待办事项列表App项目,逐步介绍如何利用安卓开发工具和语言来创建、测试并发布一个基本的安卓应用
|
2月前
|
安全 开发者 Python
跨越编程孤岛,构建互联大陆:深入探索Python进程间通信的奥秘,解锁高效协作新纪元!
【8月更文挑战第3天】在编程领域,Python 因其简洁强大而广受欢迎。但随着项目规模扩大,单进程难以应对复杂需求,此时多进程间的协同就显得尤为重要。各进程像孤岛般独立运行,虽提升了稳定性和并发能力,但也带来了沟通障碍。为解决这一问题,Python 提供了多种进程间通信(IPC)方式,如管道、队列和套接字等,它们能有效促进数据交换和任务协作,使各进程像大陆般紧密相连。通过这些机制,我们能轻松搭建起高效的多进程应用系统,实现更加复杂的业务逻辑。
26 2
|
2月前
|
开发工具 Windows
Electron V8排查问题之构建 Electron 源码时遇到 dugite 下载失败如何解决
Electron V8排查问题之构建 Electron 源码时遇到 dugite 下载失败如何解决
31 0