当前位置: 首页 > wzjs >正文

翻译软件翻译英语做网站seo推广营销公司

翻译软件翻译英语做网站,seo推广营销公司,本周最新新闻,企业网站建设方案百度文库Electron Vite Vue 项目中的 IPC 通信三层封装实践 electron-vite-vue 是一个由社区维护的轻量级脚手架项目,集成了: ⚡ Vite:快速现代的构建工具🧩 Vue 3:默认的前端 UI 框架🖥️ Electron&#xff1a…

Electron + Vite + Vue 项目中的 IPC 通信三层封装实践

electron-vite-vue 是一个由社区维护的轻量级脚手架项目,集成了:

  • ⚡ Vite:快速现代的构建工具
  • 🧩 Vue 3:默认的前端 UI 框架
  • 🖥️ Electron:跨平台桌面应用运行时

它帮助开发者快速搭建出具有前后端隔离、热更新、预加载脚本支持的 Electron 桌面应用开发环境,适合个人工具、跨平台客户端、管理后台等场景。


在这个基础上,我们希望进一步规范主进程与渲染进程之间的通信逻辑,封装一套结构清晰的 IPC 模块,以便项目功能增长时也能保持良好的可维护性。

本文将介绍如何实现这一目标,包括:

  • 主进程逻辑统一注册
  • Preload 中安全暴露 API
  • 渲染进程中统一调用

📦 项目结构示意

electron-vite-vue/
├── electron/
│   ├── main/
│   │   └── ipcHandlers.ts     ← 主进程统一注册 IPC
│   └── preload/
│       └── index.ts           ← contextBridge 暴露 API
├── src/
│   ├── App.vue
│   ├── main.ts
│   └── types/
│       └── electron-api.d.ts  ← 类型提示(可选)

🧠 目标通信结构

渲染进程 → Preload 暴露 API → 主进程处理逻辑 → 返回数据或执行动作


🧱 1. 主进程封装:ipcHandlers.ts

// electron/main/ipcHandlers.ts
import { app, ipcMain, BrowserWindow, dialog, shell } from 'electron'export function setupIpcHandlers(win: BrowserWindow) {ipcMain.handle('get-app-version', () => {return app.getVersion()})ipcMain.handle('select-file', async () => {return await dialog.showOpenDialog({ properties: ['openFile'] })})ipcMain.on('window-minimize', () => win.minimize())ipcMain.on('open-external', (_, url) => {shell.openExternal(url)})
}

然后在主进程入口(如 electron/main/index.ts)注册:

import { setupIpcHandlers } from './ipcHandlers'// 创建窗口后调用
setupIpcHandlers(win)

🛡️ 2. Preload 层暴露:preload/index.ts

// electron/preload/index.ts
import { contextBridge, ipcRenderer } from 'electron'contextBridge.exposeInMainWorld('electronAPI', {getAppVersion: () => ipcRenderer.invoke('get-app-version'),selectFile: () => ipcRenderer.invoke('select-file'),minimizeWindow: () => ipcRenderer.send('window-minimize'),openExternal: (url: string) => ipcRenderer.send('open-external', url),onNavigate: (callback: (path: string) => void) => {ipcRenderer.on('navigate-to', (_, path) => callback(path))}
})

💻 3. 渲染进程使用示例:App.vue

<script setup lang="ts">
const checkVersion = async () => {const version = await window.electronAPI.getAppVersion()console.log('当前版本:', version)
}const selectAndLogFile = async () => {const result = await window.electronAPI.selectFile()if (!result.canceled && result.filePaths.length > 0) {console.log('文件路径:', result.filePaths[0])}
}const openGitHub = () => {window.electronAPI.openExternal('https://github.com/electron-vite/electron-vite-vue')
}
</script><template><button @click="checkVersion">获取版本</button><button @click="selectAndLogFile">选择文件</button><button @click="openGitHub">打开 GitHub</button>
</template>

💡 4. 类型提示增强(可选):electron-api.d.ts

// src/types/electron-api.d.ts
export interface ElectronAPI {getAppVersion(): Promise<string>selectFile(): Promise<{ canceled: boolean, filePaths: string[] }>minimizeWindow(): voidopenExternal(url: string): voidonNavigate(cb: (path: string) => void): void
}declare global {interface Window {electronAPI: ElectronAPI}
}

并在 tsconfig.json 中添加类型目录:

{"compilerOptions": {"types": ["vite/client", "./src/types/electron-api"]}
}

🧪 5. 测试建议

  1. 确保 preloadvite.config.ts 中配置正确
  2. 确保你使用 contextIsolation: truenodeIntegration: false
  3. 主进程与渲染进程中 API 名称一致,避免大小写错误

✅ 总结

通过上述结构,我们实现了:

  • IPC 注册集中管理,主进程清晰职责分离
  • 渲染进程只需 window.electronAPI.xxx() 调用
  • 满足 Electron 安全通信规范(基于 contextBridge

这为后续功能扩展打下了良好基础,适用于中大型 Electron 桌面应用项目。


如需示例代码,可参考项目模板:electron-vite-vue

欢迎点赞、收藏、分享 🙌

http://www.dtcms.com/wzjs/497297.html

相关文章:

  • 永州微网站建设今日军事新闻最新消息中国
  • 代刷网站系统怎么做营销型网站建设方案
  • 专注东莞微信网站建设海外广告优化师
  • 商城建设青岛网站seo分析
  • 网站改版制作免费推广公司
  • 网站建设公司无锡自助快速建站
  • 重庆网站开发小顶网百度引流免费推广怎么做
  • 重庆公司注册地址变更如何办理百度推广怎么优化
  • 互联网网站建设制作南城网站优化公司
  • 十堰网站建设怎么样网络推广和网络销售的区别
  • 黄岛做网站找哪家好数据交换平台
  • 特色的武进网站建设百度seo价格
  • 网站建设有哪些软件有哪些内容陕西网络营销优化公司
  • 网站备案掉了seo优化前景
  • 免费建立自己的网站代理网站优化推广费用
  • 网站建设死人接单免费发软文的网站
  • 免费自己做网站手机搜索引擎的关键词优化
  • wordpress免费响应式主题安卓优化大师旧版本下载
  • 开发一个小软件多少钱宁波seo推广费用
  • 苏州知名网站制作百度一下首页网页手机版
  • 用ps做招生网站站长之家官网
  • 网站建设的项目计划广州新闻热点事件
  • 中国建设教育协会官网证书查询上海百度搜索优化
  • 网站建设中模版如何推广网站
  • 新手自建网站做跨境电商获客引流100种方法
  • 怎么查看网站有没有做301一个新产品的营销方案
  • logo在线制作免费生成器无水印互联网seo是什么
  • 网站制作怎么学百度网址大全下载到桌面
  • 做网站建设要学多久企业营销管理
  • 怎么做网站建设作业西安外包公司排行