electron:我们开始吧!

简介: electron:我们开始吧!

一、背景

最近有个获得用户mac地址的需求,IE内核浏览器可以利用ActiveX实现,但不能满足需求。想到使用electron项目客户端开发实现,electron基于node的,node是可以获得网卡的物理地址的。本文我们先初始化项目。

二、electron简介

Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用而不是 web 服务器的,io.js 的一个变体。

这不意味着 Electron 是绑定了 GUI 库的 JavaScript。相反,Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。说白了就是一个沙盒包了一个浏览器,从而实现桌面应用。

主进程:在 Electron 里,运行 package.jsonmain 脚本的进程被称为主进程。在主进程运行的脚本可以以创建 web 页面的形式展示 GUI。

渲染进程:由于 Electron 使用 Chromium 来展示页面,所以 Chromium 的多进程结构也被充分利用。每个 Electron 的页面都在运行着自己的进程,这样的进程我们称之为渲染进程

在一般浏览器中,网页通常会在沙盒环境下运行,并且不允许访问原生资源。然而,Electron 用户拥有在网页中调用 io.js 的 APIs 的能力,可以与底层操作系统直接交互。

主进程与渲染进程的区别:

主进程使用 BrowserWindow 实例创建窗口。每个 BrowserWindow 实例都在自己的渲染进程里运行着一个网页。当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止。

主进程管理所有页面和与之对应的渲染进程。每个渲染进程都是相互独立的,并且只关心他们自己的网页。

由于在网页里管理原生 GUI 资源是非常危险而且容易造成资源泄露,所以在网页面调用 GUI 相关的 APIs 是不被允许的。如果你想在网页里使用 GUI 操作,其对应的渲染进程必须与主进程进行通讯,请求主进程进行相关的 GUI 操作。

在 Electron,我们提供用于在主进程与渲染进程之间通讯的 ipc 模块。并且也有一个远程进程调用风格的通讯模块 remote。

三、官方文档

快速入门 | Electron

官方指南 | Electron

四、开发工具Electron Fiddle

Electron Fiddle | Electron

五、init项目

5.1、创建目录文件夹

mkdir electron-base

5.2、

pnpm init

5.3、

pnpm add electron -D

5.4、index.html

<!DOCTYPE html>
<html>
    <head>
      <meta charset="UTF-8">
      <title>Hello World!</title>
    </head>
    <body>
        <h1 id="h1">Hello World!</h1>
        We are using node
        <script>
            document.write(process.versions.node)
        </script>
        Chrome
        <script>
            document.write(process.versions.chrome)
        </script>,
        and Electron
        <script>
            document.write(process.versions.electron)
        </script>
    </body>
</html>

5.5、index.js

const {app, BrowserWindow} = require('electron')
// 创建全局变量并在下面引用,避免被GC
let win
function createWindow () {
    // 创建浏览器窗口并设置宽高
    win = new BrowserWindow({ width: 800, height: 600 })
    // 加载页面
    win.loadFile('./index.html')
    // 打开开发者工具
    win.webContents.openDevTools()
    // 添加window关闭触发事件
    win.on('closed', () => {
        win = null  // 取消引用
    })
}
// 初始化后 调用函数
app.on('ready', createWindow)  
// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
   // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
   // 否则绝大部分应用及其菜单栏会保持激活。
   if (process.platform !== 'darwin') {
        app.quit()
   }
})
app.on('activate', () => {
// 在macOS上,当单击dock图标并且没有其他窗口打开时,
// 通常在应用程序中重新创建一个窗口。
    if (win === null) {
      createWindow()
    }
})

5.6、package.json,增加start

"start": "electron .",

{
  "name": "electron-base",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^21.3.1"
  }
}

5.7、

pnpm run start

初始化项目启动成功

5.8、目录结构

六、调试

Electron 有两个进程,主进程和渲染进程,开发过程中我们这样调试它们:

6.1、渲染进程

BrowserWindow 用来创建和控制浏览器窗口,我们调用它的实例上的API即可

win = new BrowserWindow({width: 800, height: 600})
win.webContents.openDevTools() // 打开调试

6.2、主进程

可以使用vscode进行调试,未测试

七、打包发布程序

发布新应用的最快方式是使用Electron Forge

(1)添加Electron Forge作为你应用的开发依赖,并使用它的import命令来设置Forge的脚手架:

npm install --save-dev @electron-forge/cli

npx electron-forge import

(2)使用 Forge 的package命令打包发布成exe文件:

npm run package

双击打包后的exe文件即可执行项目。

八、项目配置

九、过程记录

9.1、electron/electron-quick-start

https://github.com/electron/electron-quick-start.git

十、欢迎交流指正,关注我,一起学习。

相关文章
|
存储 监控 安全
大厂案例 - 腾讯万亿级 Elasticsearch 架构实践1
大厂案例 - 腾讯万亿级 Elasticsearch 架构实践
392 0
|
存储 测试技术 Python
【附源码】ttkbootstrap实现GUI信息管理系统
使用`ttkbootstrap`构建的GUI学生信息管理系统,展示学生数据的`Treeview`,支持添加、编辑和删除记录。核心功能包括: - `Treeview`展示学生信息。 - 表单窗口添加和编辑信息,利用`open_form_window`处理交互。 - 选择项后,`edit_data`和`delete_data`分别用于编辑和删除。 - 需要Python 3.8+和ttkbootstrap 1.10.1。 - 源码展示了数据结构、事件处理和窗口布局。 要运行,安装依赖并执行代码,测试各项功能以确保正常工作。
503 0
【附源码】ttkbootstrap实现GUI信息管理系统
|
Kubernetes Cloud Native 应用服务中间件
Kubernetes 自动伸缩策略:优化资源利用率
【8月更文第29天】在现代云原生环境中,应用的流量往往具有不可预测性。为了应对这种变化,Kubernetes 提供了多种自动伸缩机制来动态调整应用实例的数量和每个实例分配的资源。本文将深入探讨两种主要的自动伸缩工具:水平 Pod 自动伸缩器 (HPA) 和垂直 Pod 伸缩器 (VPA),并提供实际的应用示例。
332 1
|
7月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
289 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
长上下文能力只是吹牛?最强GPT-4o正确率仅55.8%,开源模型不如瞎蒙
【8月更文挑战第10天】新研究NoCha挑战显示,即使是顶级的大型语言模型GPT-4o,在处理长篇幅文本时正确率仅55.8%,低于人类直观水平。该挑战基于近作英文小说,检验模型对整本书信息的理解与推理能力。结果显示,模型在全局推理上的表现不佳,倾向于依赖局部信息而非整体上下文,尤其是在复杂推理需求高的科幻小说上表现更弱。这一发现揭示了当前模型在处理长上下文任务上的局限性。论文链接: [https://arxiv.org/pdf/2406.16264](https://arxiv.org/pdf/2406.16264)。
266 65
Go - time.RFC3339 时间格式化
Go - time.RFC3339 时间格式化
160 7
|
关系型数据库 MySQL 数据库
docker容器访问宿主机mysql数据库
docker容器访问宿主机mysql数据库
580 0
|
安全 Ubuntu Linux
在Linux中,如何管理软件包的版本?
在Linux中,如何管理软件包的版本?
|
传感器 监控 数据可视化
手把手教你用IoT设备监控家庭环境数据
本实验带您体验如何通过六合一传感器(温度、湿度、二氧化碳、PM2.5、PM10、甲醛)实现家庭环境数据实时采集,并搭建可视化大屏实时监控。
|
前端开发 JavaScript 网络安全
前端破圈Docker for Win11项目不能访问🏴‍☠️
前端破圈Docker for Win11项目不能访问🏴‍☠️
445 0