Electron 跨平台桌面应用开发入门教程

Viewed 0

Electron 是一个跨平台的桌面客户端框架,使用 JavaScript、HTML 和 CSS 构建桌面应用程序。其文档位于 https://www.electronjs.org/zh/docs/latest,当前最新稳定版本为 20.1.4。

特性

Electron 的主要特点包括主进程和渲染进程的隔离(沙箱模式)。用户操作和界面渲染由渲染进程处理,而操作系统 API 调用(如创建新窗体、获取电脑信息)则交给主进程。两者通过进程间通信进行交互。

基于 Web 技术,Electron 构建于 Chromium 和 Node.js 之上,允许开发者使用 HTML、CSS 和 JavaScript 进行开发。它是一个由 OpenJS 基金会和活跃社区管理的开源项目,并兼容 Mac、Windows 和 Linux,可构建跨平台应用程序。

功能

常用功能包括自动更新、原生菜单和通知、崩溃报告以便问题分析、调试和性能分析工具,以及可打包为 Windows 安装程序,提升用户体验。

生命周期

Electron 应用分为主进程和渲染进程。主进程管理应用程序生命周期和系统交互,渲染进程负责界面显示,两者协同工作。

安装 Node.js

Electron 依赖 Node.js,因此需先安装 Node.js。从官网 https://nodejs.org/zh-cn/ 下载长期维护版本,安装后通过执行 npm -vnode -v 命令验证安装。

安装 VSCode

推荐使用 Visual Studio Code(VSCode)作为开发工具,支持前端及后端开发。从官网 https://code.visualstudio.com/#alt-downloads 下载系统版本(如 64 位管理员版本),确保兼容性。

创建启动项目

首先创建项目目录并初始化基本配置。执行以下命令:

mkdir my-electron-app && cd my-electron-app
npm init

在初始化过程中,填写项目信息:包名称(默认或自定义)、版本号(默认 1.0.0)、描述(用于应用程序打包)、入口文件(改为 main.js),以及作者和许可证等信息。确认无误后完成初始化。

使用 VSCode 打开项目根目录,查看 package.json 文件中的项目信息。接下来安装 Electron 开发依赖:

npm install --save-dev electron

在 package.json 中添加 start 命令以在开发模式下运行应用:

"scripts": {
  "start": "electron ."
}

此时运行 npm start 会报错,因为尚未配置程序主入口。

创建并启动窗体程序

安装 Electron 后,开始编写桌面应用示例。

首先添加一个展示页面 index.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
  </body>
</html>

然后在项目根目录创建 main.js 作为主入口文件:

const { app, BrowserWindow } = require('electron')

const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  })

  win.loadFile('index.html')
}

app.whenReady().then(() => {
  createWindow()
})

运行 npm start 指令,应用程序成功启动并显示页面。

获取当前版本信息

要在页面中显示 Electron、Node.js 和 Chromium 的版本号,需添加预加载脚本。在根目录创建 preload.js 文件:

window.addEventListener('DOMContentLoaded', () => {
    const replaceText = (selector, text) => {
      const element = document.getElementById(selector)
      if (element) element.innerText = text
    }
    for (const dependency of ['chrome', 'node', 'electron']) {
      replaceText(`${dependency}-version`, process.versions[dependency])
    }
  })

接着改造 main.js,加载预加载脚本:

const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        preload: path.join(__dirname, 'preload.js')
    }
  })

  win.loadFile('index.html')
}

app.whenReady().then(() => {
  createWindow()
})

保存后运行 npm start,启动页面将显示当前组件的版本号。

0 Answers