在鸿蒙 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 上的开发经验!

相关推荐
汉堡黄2 小时前
鸿蒙开发:案例集合Tabs:tabs竖向粘性
harmonyos
威哥爱编程2 小时前
【鸿蒙开发实战篇】如何基于一多能力实现响应式布局
harmonyos·arkts·arkui
威哥爱编程2 小时前
【鸿蒙开发实战篇】如何实现高级图片滤镜
harmonyos·arkts·arkui
威哥爱编程2 小时前
【鸿蒙开发实战篇】强大的跨应用数据分享与应用内文件共享
harmonyos·arkts·arkui
威哥爱编程2 小时前
【鸿蒙开发实战篇】如何利用 3D渲染引擎实现高性能动态滤镜特效
harmonyos·arkts·arkui
威哥爱编程2 小时前
【鸿蒙开发实战篇】滤镜效果图高效分享
harmonyos·arkts·arkui
S***q1922 小时前
HarmonyOS应用沙盒机制
华为·harmonyos
威哥爱编程2 小时前
【鸿蒙开发实战篇】鸿蒙6.0图片编辑实战:PixelMap与Canvas的完美结合
harmonyos
威哥爱编程2 小时前
【鸿蒙开发实战篇】鸿蒙跨设备的碰一碰文件分享
harmonyos·arkts·arkui