electron完成一个简易的桌面应用程序
学习目标
-
什么是electron,它能做什么
-
使用electron展示一个桌面应用程序的界面(简单的窗口展示)
-
electron中菜单的添加和配置
-
electron中的主进程
-
electron中的渲染进程
-
electron中主进程和渲染进程之间的通信
-
electron中系统托盘的简单实现
-
electron应用程序的打包(windows环境下)
1:大前端的发展现状
现在前端的发展已经到了大前端的时代了。大前端时代是WEB统一的时代,利用html5或者6甚至7,不但可以开发传统的网站,做炫酷的网页动态效果,更可以实现BS架构应用程序、开发手机端web应用,移动端的app应用、移动端Native应用程序、智能设备(比如可穿戴智能手表,可穿戴智能衣服)等,同时使用node.js还可以实现后台开发。甚至还可以实现桌面应用程序的开发。下面我们要介绍的electron就是用来实现跨平台的桌面应用程序开发的。
2:electron介绍
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。简单说,electron 是一个可以让我们使用js创建桌面应用程序的框架,并且可以很简单的实现跨平台,让我们可以更轻松的书写业务逻辑,而不用担心跨平台的问题
2.1.它能做什么
Electron 可以让我们使用纯 JavaScript 调用丰富的原生(操作系统) API 来创造桌面应用。除了常规的 HTML5 接口,这些应用能够使用所有的 Node.js 模块,以及 Electron 特有的模块
2.2.开发环境
你可以使用原生的Node.js开发环境来开发Electron应用。 为了打造一个Electron桌面程序的开发环境,你只需要安装好的Node.js、npm、一个顺手的代码编辑器,同时了解一些操作系统命令行客户端的常规操作
3:使用electron完成一个简易计算器
3.1.初体验-展示一个桌面应用程序界面
-
electron的下载和引入
-
app的ready事件:main.js
-
electron会自动的触发ready事件
-
在这个事件中可以创建electron窗口
-
-
electron应用程序窗口的创建(hm_createWindow函数)
-
引入BrowserWindow
-
通过BrowserWindow函数创建窗口对象
-
对窗口进行配置
-
-
electron窗口的常见操作
-
加载其它指定的页面
-
开启调试工具
-
添加关闭窗口的事件
-
-
electron应用程序的启动
- electron main.js
- electron .
- 添加package.json的script配置:“start”: “electron main.js”,之后使用npm start启动electron
3.2.添加应用程序的菜单项
-
添加菜单项的方法:Menu.buildFromTemplate(菜单项模板)
-
创建菜单项模板
-
label:菜单项文本设置
-
click:单击事件,指定事件处理函数
-
role:指定菜单项的角色
-
accelerator:触发当前菜单项的快捷键
-
设置子菜单项:通过submenu设置
-
-
添加菜单到应用程序:
3.3.主进程和渲染进程
- 主进程:在Electron中运行package.json和main脚本的进程称为主进程。例如,main.js文件属于主进程,同时在main.js文件中直接引入的js文件也属于主进程(如:require(‘./mainProcess/menu.js’))
- 渲染进程:electron使用Chromium的多进程机制来渲染页面,每个页面拥有一个自己的进程,该进程称为渲染进程。如main.js文件中加载了index.html文件,在index.html文件中引入的index.js就属于渲染进程
- 主进程和渲染进行之间通信的常见方式:(注意,这些方法全部需要在主进程已经创建了BrowserWindow之后才有效)
- ipcRenderer用于渲染进程
- ipcRenderer.on(channel, listener) ⇒ channel为事件频道,字符串.listener为触发回调函数,用于响应webContent.send()
- ipcRenderer.send(channel, data) ⇒ 概念同上,用于向ipcMain发送异步信息
- ipcMain用于主进程,响应从渲染进程中发送的消息
- ipcMain.on(channel,listener) ⇒ 响应从ipcRender中相同channel
- event.sender:主进程监听到渲染进程发送的消息,在响应事件回调函数中使用event.sender.send()方法可以向渲染进程发送消息
- webContent:ipcMain本身是无法直接发送事件的,只能通过响应事件回调的event来发送,那如果我们想先让主进程发送消息就可以使用webcontent.这个webcontent是在BrowserWIndow实例中的方法
- webContent.send(channel,data) ⇒ 主进程向渲染进程发送消息
- ipcRenderer用于渲染进程
- 不同渲染进程之间共享数据
- 我们可以简单的使用HTML5中提供的API来实现,如localStorage和sessionStorage
- 在electron中,我们可以在主进程中将一个对象存储为全局变量,在渲染进程中通过remote模块进行操作
3.4.完成菜单项功能:颜色设置
-
添加设置颜色的静态页面:color.html
-
添加设置颜色菜单项
-
添加单击事件-创建设置颜色窗口
-
业务实现:主进程中接收渲染进程传递的数据
-
渲染进程中引入ipcRenderer
-
通过ipcRenderer发射事件让主进程进行监听处理
-
-
业务实现:渲染进程接收主进程传递的数据
-
在主进程中引入ipcMain:在主进程中使用,通过ipcMain可以接收渲染进程中发送过来的消息
-
监听渲染进程中发射的事件:
-
业务实现:通过单独模块处理颜色设置
-
3.5.完成菜单项功能:字体大小设置
-
添加事件
-
完成事件处理
3.6. 实现桌面端隐藏到托盘
-
tray模块:通过tray可以实现系统托盘功能
-
我们的需求:在点关闭的时候把window隐藏起来,并且任务栏也一并需要隐藏,在点击系统通知区的图标时再把界面显示出来
-
引入:const { Tray,Menu } = require(‘electron’)
-
代码:minProcess/tray.js
3.7.完成简易的计算功能
-
为dom元素绑定事件
-
单击数字
-
单击运算符
-
重置
-
计算结果
4:应用程序打包
4.1 打包为可执行文件
- 安装
electron-packager
:npm install —save-dev electron-packager - 正式打包
-
直接使用命令打包
- electron-packager <应用目录> <应用名称> <打包平台> —out=<输出目录> <架构> <应用版本> <忽略文件><图标> —overwrite
- 配置说明:—platform
- win: 打包平台:—platform=win32 | 架构:—arch=x64 | 图标:—icon=**.ico
- mac:打包平台:—platform=darwin| 架构:—arch=x64 | 图标:—icon=**.cins
-
配置package.json命令实现打包
-
4.2 打包为安装包
-
下载:npm i electron-builder -g
-
说明:electron-builder可以将应用程序打包为安装文件,如.exe .dmg,对于windows系统打包为.exe,对于mac系统打包为.dmg
-
实现electron-builder的配置
添加script脚本配置:
运行命令:
注意:
windows下面打包.exe
mac下面打包 .dmg