在鸿蒙 PC 上使用 Electron 获取本机 IP 地址

在鸿蒙 PC 上使用 Electron 获取本机 IP 地址

前言

随着华为鸿蒙(HarmonyOS)生态的不断扩展,鸿蒙 PC 版本也逐渐走入开发者视野。虽然鸿蒙系统原生支持基于 ArkTS/ArkUI 的应用开发,但许多开发者仍希望利用熟悉的 Web 技术栈快速构建桌面应用。Electron 作为一个成熟的跨平台桌面应用框架,是否能在鸿蒙 PC 上运行?答案是:可以! 而本文将带你实战一个常见需求------在鸿蒙 PC 的 Electron 应用中获取本机 IP 地址


一、为什么选择 Electron?

Electron 允许我们使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用,其背后依赖 Chromium 和 Node.js。尽管鸿蒙 PC 的底层架构与传统 Linux 或 Windows 不同,但只要系统兼容 POSIX 接口并支持 Node.js 运行环境,Electron 应用就有可能运行。

目前,鸿蒙 PC 已支持部分开源生态工具链,包括 Node.js。因此,在鸿蒙 PC 上部署轻量级 Electron 应用已成为可能。


二、项目目标

实现一个简单的 Electron 桌面应用,在主窗口中显示本机所有网络接口的 IPv4 地址。


三、开发环境准备

如果环境有问题的可以看下这篇文章:Electron for HarmonyOS 开发环境搭建

  1. 鸿蒙 PC 开发者模式已开启

  2. 安装 Node.js(建议 v18+)

  3. 安装 npm / yarn

  1. 初始化项目:

    bash 复制代码
    mkdir electron-harmony-ip
    cd electron-harmony-ip
    npm init -y
  2. 安装 Electron:

    bash 复制代码
    npm install electron --save-dev

这里可以直接复制我的json文件

四、核心代码实现

1. 主进程(main.js)

javascript 复制代码
// main.js
const { app, BrowserWindow } = require('electron');
const path = require('path');

function createWindow() {
  const win = new BrowserWindow({
    width: 600,
    height: 400,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false, // 注意:生产环境应启用 contextIsolation
    }
  });

  win.loadFile('index.html');
}

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

  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit();
});

2. 渲染页面(index.html)

html 复制代码
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>鸿蒙 PC - IP 地址查看器</title>
</head>
<body>
  <h2>本机 IP 地址列表</h2>
  <ul id="ipList"></ul>
  <script src="renderer.js"></script>
</body>
</html>

3. 渲染进程逻辑(renderer.js)

javascript 复制代码
// renderer.js
const os = require('os');

function getLocalIPs() {
  const interfaces = os.networkInterfaces();
  const ipList = [];

  for (const name of Object.keys(interfaces)) {
    for (const iface of interfaces[name]) {
      // 只获取 IPv4 且非内部回环地址
      if (iface.family === 'IPv4' && !iface.internal) {
        ipList.push(iface.address);
      }
    }
  }

  return ipList;
}

function displayIPs() {
  const ips = getLocalIPs();
  const list = document.getElementById('ipList');
  if (ips.length === 0) {
    list.innerHTML = '<li>未检测到有效 IP 地址</li>';
  } else {
    list.innerHTML = ips.map(ip => `<li>${ip}</li>`).join('');
  }
}

displayIPs();

五、启动应用

在项目根目录下添加 package.json 的启动脚本:

json 复制代码
{
  "scripts": {
    "start": "electron ."
  }
}

package.json

json 复制代码
{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "This is my electron app",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "keywords": [],
  "author": "VON",
  "license": "ISC",
  "type": "commonjs"
}

然后运行:

bash 复制代码
npm start

如果一切顺利,你将在鸿蒙 PC 上看到一个窗口,列出本机所有有效的 IPv4 地址。

这里由于缺少真机,下篇博客会补充真机运行效果的,希望大家见谅


六、注意事项

  1. 安全性 :示例中关闭了 contextIsolation 以简化 Node.js API 调用。在生产环境中,建议通过预加载脚本(preload)安全地暴露所需功能。
  2. 兼容性:确保鸿蒙 PC 的 Node.js 版本与 Electron 兼容。可参考官方 Electron 支持的 Node.js 版本表。
  3. 权限问题:获取网络信息属于基础系统能力,通常无需额外权限,但在某些安全策略严格的鸿蒙版本中可能受限。

七、结语

虽然鸿蒙原生开发推荐使用 ArkTS,但在过渡期或特定场景下,Electron 仍是一个高效的桌面应用开发选择。本文展示了如何在鸿蒙 PC 上利用 Electron + Node.js 快速实现 IP 地址获取功能,为后续更复杂的网络工具开发打下基础。

未来,随着鸿蒙对开源生态的支持进一步完善,Electron 应用在鸿蒙平台上的体验将更加流畅。期待更多开发者加入鸿蒙生态,共建多元化的应用世界!

如果你喜欢这篇文章,欢迎点赞、转发,或在评论区分享你在鸿蒙 PC 上的开发经验!

相关推荐
ardss5 小时前
ZCode 崩了,项目列表全丢:我从 69MB 日志里把数据一条条挖了出来
electron
草莓熊Lotso13 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
kekekzt1 天前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
贾伟康1 天前
【天体运行模拟|11】HarmonyOS ArkTS 收藏与笔记实战:同步知识页和个人学习记录
harmonyos·arkts·preferences·多设备适配·arkdata
Learn-Share_HY1 天前
[IT Network]如何配置反向路徑過濾器(rp_filter),以解決路由不對稱問題?
linux·嵌入式硬件·物联网·网络协议·tcp/ip·http·iot
2501_919749031 天前
华为鸿蒙录音可视化APP—小羊声觉
华为·harmonyos·鸿蒙
大雷神1 天前
HarmonyOS AR Engine深度估计实战——把毫米距离画成实时热力图
华为·ar·harmonyos
GKxx1 天前
在 HarmonyOS 上给 QEMU 搭一个最小 aarch64 Linux guest(内核 + busybox initramfs)
linux·华为·qemu·harmonyos·鸿蒙·鸿蒙pc
贾伟康1 天前
【天体运行模拟|08】HarmonyOS ArkTS 单位换算实战:处理天文尺度、科学计数与精度
harmonyos·arkts·arkui·数值精度·单位换算
lilian2331 天前
HarmonyOS 7 新特性(十三)|3DGS 模型加载、交互与性能回退
3d·交互·harmonyos