跨平台桌面应用开发的演进带来了一系列独特的挑战,主要体现在如何确保在 Windows、macOS 和基于 Linux 的系统等不同操作系统上功能和用户体验的一致性。从技术角度来看,实现这种一致性是保持应用平稳和令人满意的用户体验的关键,这自然需要开发者掌握多种技术并为每个平台维护独立的代码库。随着时间的推移,出现了多种框架来帮助开发者克服这些挑战。其中一个值得关注的解决方案是 Electron 框架。它为简化跨平台开发流程并解决多样化运行环境固有的复杂性提供了灵活的平台。近年来,Electron 框架的流行度显著上升,其被广泛应用于各种知名应用程序中,如 Notion、Microsoft Teams 和 Slack 等。这种广泛的使用间接证明了 Electron 在简化跨平台开发工作流程以及应对多种操作环境挑战方面的高效性。
1.1. 什么是 Electron
那么,什么是 Electron?简单来说,Electron 是一个开源框架,专为构建桌面应用而设计。它允许开发者使用常见的 Web 技术(如 JavaScript、HTML 和 CSS)来创建桌面应用,而无需学习新的编程语言。这意味着已经熟悉 Web 开发的开发者可以无缝过渡到使用 Electron 构建桌面应用程序。
1.2. 它是如何工作的?
基本上,Electron 应用的流程始于主进程(Main Process),该进程由 Node.js 运行时启动,通常基于 package.json 文件中的配置开始运行。主进程负责应用的后端操作,例如创建窗口和管理系统级交互。随后,主进程会创建渲染进程,每个渲染进程都会运行一个 Chromium 实例。这些进程负责前端工作,渲染 HTML、CSS 和 JavaScript 等网页内容,用于显示应用的用户界面。为了实现主进程与渲染进程之间的通信,Electron 使用了进程间通信 (IPC)。在这一阶段,渲染进程可以请求主进程执行需要与操作系统原生集成的操作,而出于安全原因,渲染进程本身被限制无法直接执行这些操作。注意:想要全面了解和探索 Electron 框架,可以访问以下链接:Electron 官方文档[1]。现在,在了解了 Electron 框架的基本概念之后,让我们继续下一部分,构建第一个简单的“Hello-World”应用程序。
II. 构建第一个简单的“Hello-World”应用程序
正如我们所知,为了能够进行高效的安全测试,我们需要对测试对象的基本原理有深入的了解。因此,在本节中,我们将尝试使用 Electron 创建一个简单的“Hello-World”应用程序(它将显示一个一级标题大小的简单文本,并弹出一个简单的警告对话框)。
此命令将 Electron 全局安装在我们的操作系统上,使我们可以从任何位置访问 Electron CLI(命令行界面)。全局安装确保我们能够创建新的 Electron 项目并运行其他与 Electron 相关的命令,而不受特定项目目录的限制。B. 本地安装(Local installation): 然而,如果我们希望 Electron 仅在特定的项目目录中可用,并将其作为开发依赖项对待,可以使用以下安装命令:
npm install electron - save-dev
这个命令将 Electron 安装为我们项目的开发依赖。这意味着 Electron 将被包含在项目的 package.json 文件中的“devDependencies”部分。采用这种方式,当应用程序发布时,Electron 会自动被排除,确保仅在需要开发时才安装。简而言之,通过将 Electron 作为开发依赖进行管理,我们可以简化部署过程,并确保我们的应用程序可以轻松地分发并在其他机器上运行,而无需单独安装 Electron。总结一下,以下是两种安装模式的区别:无论根据现有考虑选择哪个选项,在这一步中,重要的是确保 Electron 已经被安装。注意:在这个流程中,我们将使用 --save-dev 标志来安装 Electron。如果仔细观察,采用这种方式安装 Electron 会将 devDependencies 参数添加到 package.json 文件中。
2.2. 创建应用程序
2.2.1. 创建主应用程序
在配置好必要的设置后,下一步是为我们的 Electron 项目创建主应用程序文件。这个文件作为我们 Electron 应用程序的入口点,在这里我们定义应用程序的行为和功能。那么,我们该如何操作呢?首先,我们需要创建一个名为“main.js”的文件,如子节 2.1.3 中所提到的,并将其放置在“app”目录下。之后,我们可以使用喜欢的文本编辑器打开 main.js 文件,并开始编写简单的代码来创建将加载 index.html 文件的应用程序窗口。注意:这段 main.js 代码通常包括 Electron 的初始化、创建窗口、处理事件和其他应用程序逻辑。
那么,这段代码是什么意思呢?首先,我们从 Electron 中导入了必要的模块,包括 app 和 BrowserWindow。接下来,我们尝试定义一个函数 createWindow(),用于为我们的 Electron 应用程序创建一个新的浏览器窗口。在 createWindow() 函数中,我们创建了一个新的 BrowserWindow 实例,并指定了窗口的宽度、高度和网页偏好设置。最后,我们尝试使用 loadFile() 方法将一个 HTML 文件(例如:index.html)加载到新创建的窗口中。确保我们也在项目目录中创建了 index.html 文件,因为它在上述代码中被引用。因此,随着 main.js 文件的创建和初始应用程序逻辑的定义(例如:浏览器窗口和加载文件),我们已经为 Electron 应用程序奠定了基础。我们现在可以继续编写额外的代码,以根据需要构建应用程序的功能。
2.2.2. 创建并编写 index.html 内容
最后,我们到达了构建这个简单 hello world 项目的最后一步,即添加 index.html 文件中的内容。这个 HTML 文件将作为我们 Electron 应用程序的用户界面,定义用户看到的内容以及与之交互的部分。注意:我们还会看到这一步如何展示 Electron 如何利用常见的 Web 技术,如 JavaScript 和 HTML,来创建桌面应用程序,而不需要开发者学习新的编程语言。为了实现这一点,简单地创建一个名为 index.html 的新文件,并将其放置在项目的根目录中(而不是放在 app 目录中)。在我们的例子中,目录将是 “my-electron-app”。
<!DOCTYPE html><html><head><title>Example of Electron App</title><script> window.onload = function() { alert("Hello World"); };</script></head><body><h1>Welcome in our first Electron App!</h1><p>This is just a sample paragraph.</p></body></html>
在这个例子中,我们提供了一个基本的 HTML 结构,包含一个标题和一个段落。此外,我们还包含了一个 JavaScript 函数,当文档加载时触发一个警告消息,简单地演示了 JavaScript 如何与 Electron 环境进行交互。是的,我们可以根据应用程序的具体需求修改 HTML 文件的内容。一旦我们在 "index.html" 文件中创建了内容,我们就完成了简单 Electron hello world 应用程序的设置。随着 Node.js 安装、项目目录配置、package.json 初始化、Electron 安装以及主应用程序文件的创建,我们现在准备执行我们的 Electron 应用程序,并在 Electron 窗口中查看显示的 hello world 消息。
2.3. 运行和构建应用程序
2.3.1. 运行 Electron 应用程序
要运行我们的 Electron 应用程序,我们需要确保仍然在项目目录中(在本例中是 my-electron-app)。之后,我们执行以下命令:
npm start
这个命令将根据 package.json 文件中指定的配置启动 Electron 应用程序。默认情况下,npm start 命令将在 package.json 文件的“scripts”部分中查找一个名为 “start” 的脚本(回顾一下我们在子节 2.1.3 中调整的参数),并执行它。如果之前的步骤都已正确执行,我们现在应该能够看到 Electron 应用程序正在运行,并且应用程序窗口显示了 index.html 文件中指定的内容,如下图所示:
2.3.2. 构建和分发应用程序
在经历了各种步骤之后,有些人可能会想知道这个应用程序是如何分发的,以及它是如何到达最终用户的。当涉及到分发 Electron 应用程序时,我们需要确保应用程序为不同的操作系统和架构正确打包。这当然是为了确保用户可以轻松地在他们的设备上安装和运行应用程序,而不管他们的操作系统是什么。例如,在 Windows 上,Electron 应用程序通常打包为可执行安装文件(例如 .exe 或 .msi)。对于 Linux 发行版,Electron 应用程序可能会根据使用的包管理器打包为不同的格式(如 .deb 或 .rpm 包)。与此同时,在 macOS 上,它们通常会打包成 macOS 应用程序包——通常是 .dmg 文件格式。请注意,在本文中,我们将重点讨论为 macOS 构建应用程序。然而,在 Windows 或 Linux 上构建时生成的输出不会有显著区别。那么,如何实现呢?为了创建这个 macOS(或任何其他操作系统)应用程序包,我们需要使用 Electron Builder,这是一个用于打包和分发 Electron 应用程序的工具。通过 Electron Builder,我们可以配置应用程序打包过程的各个方面,例如应用程序名称、版本、图标和分发格式。首先,我们需要在项目中将 Electron Builder 安装为开发依赖。我们可以通过在终端或命令提示符中运行以下命令来完成:
这个命令将根据 package.json 文件中指定的配置,启动专门针对 macOS 的打包过程。打包过程完成后,我们将会在指定的输出目录(在本例中是“dist”)中找到打包后的应用程序文件。随着 Electron 应用程序成功打包,我们现在拥有了一个可执行文件,可以分发给用户。用户可以在他们的设备上安装并运行该应用程序,从而享受应用程序的功能。好了,我们几乎已经完成了这一部分。希望到目前为止,读者们已经对基于 Electron 的应用程序有了一个大致的了解。在下一部分,我们将开始探讨如何检测 Electron 应用程序的技术讨论,并概述常见的测试方法,这些方法通常用于测试这些 Electron 应用程序。
References
[1] Electron 官方文档: https://www.electronjs.org/docs [2] https://nodejs.org: https://nodejs.org/