基于技术
- Chromium
- Node.js
运行原理
Chromium 提供了 UI 能力
Electron 内置Node.js ,提供了操作系统底层API的能力,常用模块 Path、fs、Crypto
内置原生应用程序接口调用
QT 对比
项目初始化
1 | npm install @vue/cli -g |
安装卡顿 node install.js
1 | # ~/.npmrc 单独设置 Electron 的镜像 |
启动程序
npm run electron:serve
failed to install correctly
- https://npm.taobao.org/mirrors/electron/11.2.3/ 下载 electron-v11.2.3-win32-x64.zip
- node_modules\electron\下创建dist文件夹
- 下载的压缩包解压进刚刚创建的dist文件夹
- node_modules\electron\中创建path.txt,内容为electron.exe
进程、常用功能
- 主进程
处理原生应用逻辑,运行package.json的main脚本的进程被称为主进程,有且仅有一个主进程
创建窗口等所有系统事件都在主进程中进行
- 设置渲染进程的大小、外观
1 | win = new BrowserWindow({ |
- 设置菜单
1 | function createMenu(){ |
- 当应用启动后,初始化完成需要做的事情
1 | app.on('ready', async() => { |
- 当所有窗口关闭时要做的事情
1 | app.on('window-all-closed', () => { |
- 与渲染进程进行通讯
ipcRenderer(渲染进程中使用的对象)
ipcMain(主进程中使用的对象)
- 打开新窗口
1 | const winURL = |
渲染进程
负责界面渲染
每创建一个页面都会创建一个渲染进程
每个页面运行在自己的渲染程序中
每个渲染进程都是独立的,只关心自己所运行的页面系统通知
通知一共两种调用方式:- HTML5 Notification API 渲染进程调用
- Notification 模块 主进程调用
设置托盘
托盘属于系统级操作,主进程中设置,且必须在程序 ready 后设置
1 | // 设置托盘 |
打包
设置 appid
package.json (”appId”: “com.ipp.electronvue”)
vue.config.js 配置 electron-builder 参数
调用 C++ Dll
1 | 1. npm install node-gyp -g |
注意:python 版本必须 2.7
ffi-napi
1 | const ffi = require('ffi-napi') |
electron-edge-js
windows专属功能
1 | edge = require('electron-edge-js') |
报错解决方案:vue.config.js 配置 externals: ['electron-edge-js']
集成 sqlite3
需要安装node-gyp和windows-build-tools
npm install sqlite3 --save
npm install (否则会出现找不到sqlite3.node)
1 | import sq3 from 'sqlite3' |
执行 CMD
- 引用 child_process 模块
1 | import { exec } from ‘child_process’ |
1 | // 解决中文乱码问题 |
electron 更新
1 | npm install electron-updater --save-dev |
扩展
postMessage
可以实现不同源的页面在iframe
中通讯, 但是不能跨浏览器窗体。localStorage
存储的值发生变化时会在当前窗体window触发 storage 事件。 多个同源的页面是共享localStorage,因此浏览器同时打开多个同源页面,只要localStorage改变了,都会收到 storage 事件。