基本要求
创建第一个应用
使用预加载脚本
添加功能
打包
发布更新实现
初始化
npm init安装必须的依赖
npm install electron -D配置package.json
scripts.start: electron .
main: main.js|ts 指定程序的入口脚本吧
测试运行,在我们的命令行终端中就会出现对应的打印输出吧 npm run start
页面的显示
在Electron中每个窗口都是一个独立的页面,页面都是本地的 HTML 吧,或者说来自于远程的 URL 地址
在Electron中的话页面的加载一般是加载到的是我们的 BrowserWindow 中的呐
您应用中的每个页面都在一个单独的进程中运行,我们称这些进程为 渲染器 (renderer)
在上面的描述中我们的整个生命周期的管理和应用都是来自于我们的
app所以说生命周期的话也是在这里面进行管理的呐
首先注意一点的是我们的 electron 是一个跨平台的开发框架架构,所以说在很多时候需要手动进行解决我们的程序之间的差异性吧
此时尤其核心注意的点,核心后续积累哪些行为在不同的操作系统上表现会有差异,这个是需要核心关注的点吧
electron只支持三种平台的代码:
win32(windows)liunxdarwin(macos)
开始生命周期
生命周期一:window-all-closed
需求是关闭一个应用的所有窗口后让程序退出:window-all-closed
app.quit() 执行程序退出吧
但是这里注意的是 macos 的行为就具备一个差异性,程序的所有窗口关闭了,程序还是没有退出的呐
process.platform 获取平台信息
同时我们我们还可以实现的是没有窗口打开直接打开信息的 macos 窗口的特性实现吧,核心是为了针对我们的 macos 系统的呐
但是这个事件必须在窗口打开后才可以实现监听吧
Electron 的主进程是一个拥有着完全操作系统访问权限的 Node.js 环境
另一方面,出于安全原因,渲染进程默认跑在网页页面上,而并非 Node.js里
为了将 Electron 的不同类型的进程桥接在一起,我们需要使用被称为 预加载 的特殊脚本
Electron 20 开始预加载脚本默认沙盒化,不在拥有完整的 Nodejs 环境的访问权
这意味着你只拥有一个 polyfilled 的 require 函数,这个函数只能访问一组有限的 API
这个预加载脚本的话一般出现在的是我们的 preload.js 中,利用的是 contextBridge
Electron 的主进程和渲染进程有着清楚的分工并且不可互换
这代表着无论是从渲染进程直接访问 Node.js 接口,亦或者是从主进程访问 HTML 文档对象模型 (DOM),都是不可能的
进程间通信 (IPC)。可以使用 Electron 的 ipcMain 模块和 ipcRenderer 模块来进行进程间通信。 为了从你的网页向主进程发送消息,你可以使用 ipcMain.handle 设置一个主进程处理程序(handler),然后在预处理脚本中暴露一个被称为 ipcRenderer.invoke 的函数来触发该处理程序(handler)
main.js 主要是管理的是主进程:app BrowserWindow ipcMain 等使用
preload.js 核心是预加载脚本吧 contextBridge ipcRenderer
renderer.js 核心就是书写我们的每个页面单独的处理函数吧,事件的定义而已
使用我们的 electorn forge 进行打包即可
@electron/packager、 @electron/osx-sign、electron-winstaller 等
npm install --save-dev @electron-forge/cli
npx electron-forge import
同时也会多一个 forge.config.js: 在预填充的配置中看到多个makers(生成可分发应用程序包的包),每个目标平台一个
创建可分发版本:npm run make
npm install --save-dev @electron-forge/publisher-github
npm install update-electron-app