electron 桌面端业务中的小结(坑)
发布网友
发布时间:2024-10-04 02:16
我来回答
共1个回答
热心网友
时间:2024-10-08 18:19
在开发 electron 桌面端应用时,会遇到各种挑战,本文将总结一些关键问题和解决方案。
首先,安装 electron 依赖时,由于网络问题可能遇到错误。解决方法是确保网络稳定,或使用镜像源。推荐使用 9.4.0 版本的 electron。
本地数据库选择方面,IndexedDB 是一个不错的选择。它同时支持 web 端和桌面端,存储容量与用户磁盘容量相关,最大可达磁盘容量的 1/3。特点包括:无需 SQL、支持事务和版本号、多种字段类型。
对于关系型数据库,SQLite 是一个理想选择。它具有 ACID 特性,体积小巧,可以借助 knex 库进行 ORM 操作。然而,SQLite 需要重新编译并可能遇到坑点。
Lowdb 是一个基于 Lodash 的轻量级 JSON 文件数据库,适用于简单的存储需求。但它不支持索引、事务或批量操作。electron-store 是另一个适合简单存储的库。
Localstorage 和 Sessionstorage 存储容量有限,适合小型数据存储。但 Sessionstorage 在每次关闭应用程序后会清空内容,不适合持久化存储。而 Cookies 存储容量小,不支持查询。
对于自动升级,推荐使用 electron-updater 或自行编写升级模块。在主进程执行升级操作时,可以利用 electron 下载最新版本并执行升级。
针对不同的操作系统平台,如 Windows 和 macOS,处理升级的策略有所不同。在 Windows 上,可以执行升级 exe,而在 macOS 上,需要使用 hdiutil 指令解压 zip 文件并更新应用。
网络检查方面,可以使用 network-interface 库监听网络连接状态。对于主进程的 HTTP 请求,可以使用 net 模块封装。对于文件下载,使用 electron 提供的 getPath 方法,并通常在下载目录下。
日志本地存储和打包上传可以使用 winston 或 electron-log 库。IPC 通讯则借助 electron 的 ipcMain 和 ipcRenderer 进行。
设置开机启动项和实现其他应用唤醒客户端的功能,通过 setLoginItemSettings 和 setAsDefaultProtocolClient 方法实现。全局快捷键通过 globalShortcut 方法配置。
托盘功能需考虑不同操作系统的需求,如 macOS 的暗黑模式。对于 macOS 的 TouchBar,通过注册 TouchBarButton 接口实现。硬件加速问题在 macOS 版本中可能遇到,解决方法是禁用硬件加速。
开发模式 (development、production) 通过注入 process.env.XXX 实现,其中 XXX 是通过 cross-env 组件注入的环境变量。在项目启动时获取 NODE_ENV。
崩溃日志发送可以使用 requestSingleInstanceLock 方法实现单例模式。防止白屏现象,通过加载 loading.html 页面并使用 BrowserView 和 BrowserWindow 实现。
通过设置 webPreferences.preload 参数,使用 electron-bridge 实现跨 web 端和桌面端应用的兼容性。对于浏览器请求拦截,可以监听 webContents.session.webRequest.onBeforeRequest。
若集成 Vue 或 React,推荐使用 electron-vue 或 electron-react-boilerplate。无 frame 模式下,只需在创建 BrowserWindow 时将 frame 设置为 false。
窗口右上角的操作(最大化、最小化、关闭)在 Windows 系统中需要自定义实现。而在 macOS 系统中,顶部需要设置一条可以拖拽的区域。关于 DOM 拖拽联通窗口拖拽代理设置,待进一步研究。
打包发布时,可以使用 electron-builder 或 electron-packager。前者支持多种平台,内置的 autoUpdate 功能方便应用更新,支持 CLI 和 JS API。打包参数需根据项目需求调整。
总结,开发 electron 桌面端应用时,需要关注依赖管理、数据库选择、网络与文件操作、自动升级、日志与通讯、界面交互、性能优化等多个方面。通过合理选择工具和策略,可以有效提高开发效率和用户体验。