2019 桌面软件开发指北(一) 关于 Electron
大概十年前 Palm webOS 发布的时候,有一种看法认为未来的移动端软件和桌面软件将被 Web 取代。
彼时 Chromium 未满周岁,Node.js 在娘胎里即将出世。 十年间,前者借 Google 之力一统浏览器江山,后者则颠覆了所有前端开发的工程实践。 这两者的结合则是一个划时代的跨平台的桌面软件开发新方式 - Electron。
十年预言成为现实。
我们不讨论原生开发。在足够的功能支持和优越的开发效率面前,大多数应用场景真的没必要再讨论是否原生开发。
关于 Electron
Electron 整合了 Node.js 和 Chromium。 它能够充分利用 Node.js 丰富的软件仓库,并使用 Chromium 的渲染引擎部分,同时保持小巧和可维护。
Electron 应用结构
Electron 程序有两类进程。
程序入口是一个 JavaScript 脚本,称为 主进程。 开发者可以在主进程中用脚本创建页面展示用户界面。 用户界面其实是使用 HTML/CSS/JavaScript 等标准 web 技术开发的页面,运行在 渲染进程 中,由 Chromium 渲染。
主进程能够调用所有的系统原生 API,而渲染进程则只能调用标准的 Web API。 (早期版本中渲染进程可以直接访问很多系统原生 API,为了安全考虑,新版本默认禁止渲染进程直接访问系统原生 API)
进程间通信
主进程与渲染进程之间可以通过 ipcRenderer/ipcMain 发送消息,或者使用 electron.remote 模块进行 IPC 通信。 渲染进程之间则可以使用 localStorage/sessionStorage/IndexedDB 等方式共享数据。
文件结构
运行一个最基本的 Electron 项目只需要 3 个文件,如下:
其中,index.js 包含了软件生命周期的主要逻辑,如窗口管理,菜单栏管理等。 我们可以决定采用什么方式来创建软件的窗口,如窗口尺寸、是否全屏、透明度等。
index.html 用于定义窗口范围内的程序界面。 采用标准的 HTML 技术,可以轻松控制文本、图片、按钮、表单的样式和行为。 也可以在页面中引入 JavaScript 和 CSS 文件,正如在浏览器中编程一样。