news 2026/3/26 18:43:34

鸿蒙 + Electron:跨端开发新范式,从环境搭建到实战开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙 + Electron:跨端开发新范式,从环境搭建到实战开发

鸿蒙 + Electron:跨端开发新范式,从环境搭建到实战开发

前言

随着鸿蒙系统(HarmonyOS)的生态不断完善,越来越多的开发者开始探索鸿蒙与主流跨平台框架的结合方案。Electron 作为一款成熟的跨平台桌面应用开发框架,可以让开发者用 HTML、CSS、JavaScript 快速构建 Windows、macOS、Linux 桌面应用。而将 Electron 与鸿蒙系统结合,既能利用 Electron 的前端生态优势,又能适配鸿蒙桌面端(如鸿蒙 PC、鸿蒙平板),实现一套代码跨多端运行。本文将从环境搭建到实战开发,带你一步步掌握鸿蒙 + Electron 的开发流程,包含完整代码案例。


一、鸿蒙与 Electron 的结合点

首先需要明确:鸿蒙系统(桌面端)支持标准的 Linux/Windows 应用运行环境,而 Electron 本身是基于 Node.js 和 Chromium 的跨平台框架,其打包后的应用可以直接在鸿蒙桌面端运行。此外,鸿蒙提供的方舟开发框架(ArkUI)与 Electron 的前端技术栈可以互补,实现更灵活的跨端开发。

核心优势

  1. 技术栈复用:前端开发者可直接使用 HTML/CSS/JS 技术栈开发鸿蒙桌面应用,无需学习全新的原生开发语言。
  2. 跨平台兼容:一套代码可同时运行在 Windows、macOS、Linux 以及鸿蒙桌面端。
  3. 生态丰富:Electron 拥有海量的 npm 包和社区资源,能快速实现复杂的桌面应用功能。

二、开发环境搭建(附截图说明)

环境要求

  • 操作系统:Windows 10/11、macOS 12+、鸿蒙桌面端(如华为 MateBook 系列)
  • Node.js:v16.x 及以上(Electron 对 Node.js 版本有兼容要求)
  • npm/yarn:包管理工具
  • 代码编辑器:VS Code(推荐,搭配 Electron 插件更佳)

步骤 1:安装 Node.js(截图 1:Node.js 官网下载页面 + 安装后 cmd 验证node -v

  1. 访问Node.js 官网,下载对应系统的 LTS 版本(长期支持版)。
  2. 安装完成后,打开终端 / 命令行,输入node -vnpm -v,若显示版本号则安装成功。

步骤 2:初始化 Electron 项目(截图 2:VS Code 终端执行初始化命令)

  1. 新建项目文件夹(如harmony-electron-demo),打开 VS Code 并进入该文件夹。
  2. 执行初始化命令,创建package.json文件:

    bash

    运行

    npm init -y
  3. 安装 Electron 依赖(推荐安装指定版本,避免版本兼容问题):

    bash

    运行

    npm install electron@25.8.0 --save-dev

步骤 3:配置 package.json 启动脚本

修改package.json中的scripts字段,添加启动命令:

json

{ "name": "harmony-electron-demo", "version": "1.0.0", "description": "鸿蒙+Electron演示项目", "main": "main.js", "scripts": { "start": "electron .", // 启动Electron应用 "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": ["harmony", "electron"], "author": "", "license": "ISC", "devDependencies": { "electron": "^25.8.0" } }

三、第一个鸿蒙 + Electron 应用:Hello World(附代码 + 运行截图)

步骤 1:编写主进程代码(main.js)

Electron 应用分为主进程(Main Process)和渲染进程(Renderer Process),主进程负责窗口管理、系统交互等核心功能。

javascript

运行

// main.js - 主进程代码 const { app, BrowserWindow } = require('electron'); const path = require('path'); // 定义创建窗口的函数 function createWindow() { // 创建浏览器窗口 const mainWindow = new BrowserWindow({ width: 800, // 窗口宽度 height: 600, // 窗口高度 webPreferences: { preload: path.join(__dirname, 'preload.js'), // 预加载脚本(主进程与渲染进程通信桥梁) nodeIntegration: true, // 允许渲染进程使用Node.js API(开发环境可开启,生产环境建议关闭) contextIsolation: false // 关闭上下文隔离(与nodeIntegration配合使用) } }); // 加载本地HTML文件(渲染进程页面) mainWindow.loadFile('index.html'); // 开启开发者工具(开发环境使用,生产环境可注释) mainWindow.webContents.openDevTools(); } // Electron应用就绪后创建窗口 app.whenReady().then(() => { createWindow(); // 处理macOS系统的窗口行为(关闭所有窗口后不退出应用) app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); }); // 处理Windows/Linux系统的退出行为(关闭所有窗口后退出应用) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } });

步骤 2:编写预加载脚本(preload.js,可选但推荐)

预加载脚本用于在渲染进程加载前执行,作为主进程和渲染进程的安全通信桥梁:

javascript

运行

// preload.js - 预加载脚本 window.addEventListener('DOMContentLoaded', () => { // 向渲染进程暴露全局方法(示例) const replaceText = (selector, text) => { const element = document.getElementById(selector); if (element) element.innerText = text; }; // 展示Electron和Node.js版本信息 for (const dependency of ['chrome', 'node', 'electron']) { replaceText(`${dependency}-version`, process.versions[dependency]); } });

步骤 3:编写渲染进程页面(index.html)

渲染进程负责应用的 UI 展示,使用标准的 HTML/CSS/JS 编写:

html

预览

<!-- index.html - 渲染进程页面 --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>鸿蒙+Electron Demo</title> <style> /* 简单的样式美化 */ body { font-family: "Microsoft YaHei", sans-serif; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 90vh; background-color: #f5f5f5; } .title { color: #007dff; /* 鸿蒙主题色 */ font-size: 2.5rem; } .version-info { margin-top: 20px; color: #666; } </style> </head> <body> <h1 class="title">Hello Harmony Electron!</h1> <div class="version-info"> <p>Chrome版本: <span id="chrome-version"></span></p> <p>Node.js版本: <span id="node-version"></span></p> <p>Electron版本: <span id="electron-version"></span></p> </div> </body> </html>

步骤 4:运行应用(截图 3:Electron 应用窗口运行效果,显示 Hello Harmony Electron 和版本信息)

在 VS Code 终端执行启动命令:

bash

运行

npm start

此时会弹出一个 Electron 窗口,显示我们编写的 UI 内容,这就是第一个鸿蒙 + Electron 应用!


四、进阶实战:鸿蒙 Electron 应用实现文件选择功能(附代码)

接下来我们实现一个更实用的功能:点击按钮选择本地文件,并在应用中显示文件路径。这个功能涉及主进程与渲染进程的 IPC 通信(进程间通信),是 Electron 开发的核心知识点。

步骤 1:修改渲染进程页面(index.html)

添加按钮和文件路径展示区域:

html

预览

<!-- 新增部分 --> <button id="select-file-btn">选择本地文件</button> <p id="file-path">未选择文件</p>

步骤 2:修改主进程代码(main.js)

引入dialog模块(用于打开系统文件选择对话框),并监听渲染进程的 IPC 请求:

javascript

运行

// 新增:引入ipcMain模块 const { app, BrowserWindow, ipcMain, dialog } = require('electron'); // ... 原有代码不变 ... // 监听渲染进程的"select-file"请求 ipcMain.handle('select-file', async () => { // 打开文件选择对话框 const result = await dialog.showOpenDialog({ properties: ['openFile'], // 允许选择单个文件 filters: [ // 过滤文件类型(示例:只允许选择txt和json文件) { name: 'Text Files', extensions: ['txt', 'json'] }, { name: 'All Files', extensions: ['*'] } ] }); // 返回选择的文件路径(若取消选择则返回空) if (!result.canceled) { return result.filePaths[0]; } else { return '未选择文件'; } });

步骤 3:修改渲染进程的交互逻辑(在 index.html 中添加 JS 代码)

html

预览

<script> // 给按钮绑定点击事件 document.getElementById('select-file-btn').addEventListener('click', async () => { // 向主进程发送"select-file"请求,并获取返回结果 const filePath = await window.electron.ipcRenderer.invoke('select-file'); // 展示文件路径 document.getElementById('file-path').innerText = `选择的文件:${filePath}`; }); // 暴露ipcRenderer到全局(需修改preload.js) </script>

步骤 4:更新预加载脚本(preload.js)

向渲染进程暴露ipcRendererinvoke方法(安全通信):

javascript

运行

const { ipcRenderer } = require('electron'); window.addEventListener('DOMContentLoaded', () => { // ... 原有代码不变 ... }); // 新增:暴露electron对象到全局 window.electron = { ipcRenderer: { invoke: ipcRenderer.invoke } };

运行效果(截图 4:点击按钮后弹出文件选择对话框,选择文件后显示路径)

执行npm start启动应用,点击 “选择本地文件” 按钮,选择一个文件后,页面会显示该文件的路径,功能完美实现!


五、打包鸿蒙 Electron 应用

开发完成后,需要将应用打包为可执行文件(如.exe、.app、.deb),以便在鸿蒙桌面端运行。这里使用electron-builder工具进行打包。

步骤 1:安装 electron-builder

bash

运行

npm install electron-builder --save-dev

步骤 2:配置 package.json 打包脚本

json

"scripts": { "start": "electron .", "build": "electron-builder" // 新增打包命令 }, // 新增打包配置 "build": { "appId": "com.harmony.electron.demo", // 应用唯一标识 "productName": "HarmonyElectronDemo", // 应用名称 "directories": { "output": "dist" // 打包输出目录 }, "win": { // Windows打包配置 "target": "nsis" // 生成安装包 }, "linux": { // Linux/鸿蒙桌面端打包配置 "target": "deb" // 生成deb安装包(鸿蒙桌面端支持deb格式) } }

步骤 3:执行打包命令

bash

运行

npm run build

打包完成后,会在dist目录下生成对应系统的安装包,将deb包拷贝到鸿蒙桌面端,即可安装运行!


六、注意事项与优化建议

  1. 鸿蒙系统适配:鸿蒙桌面端基于 Linux 内核,因此打包时选择linux目标(deb/rpm 格式),可直接安装运行。
  2. 性能优化:Electron 应用默认占用内存较高,可通过关闭不必要的开发者工具、优化渲染进程代码来降低内存占用。
  3. 安全策略:生产环境中,建议关闭nodeIntegration,使用预加载脚本进行安全的进程通信。
  4. 鸿蒙 API 调用:若需要调用鸿蒙系统的原生 API,可通过 Electron 的native module扩展实现,或使用鸿蒙提供的 JS API 对接。

总结

本文从鸿蒙与 Electron 的结合点出发,详细介绍了开发环境搭建、Hello World 应用、实战文件选择功能以及应用打包的全流程。通过 Electron,前端开发者可以快速上手鸿蒙桌面应用开发,充分复用现有技术栈,实现跨平台开发的高效性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!