electron编译环境搭建和第一个桌面应用例子

news/2024/4/28 14:35:43/文章来源:https://blog.csdn.net/south_d/article/details/130330902

前言

Electron是基于Chromium和Node.js实现的,所以开发人员所需要使用到的前端技术主要包括以下方面:

1、Html、CSS、JavaScript、ES6

2、前端开发工具Vue、Angular、React等的一种

3、其他网络、缓存、通讯、系统、跟踪等前端技术

4、对Vscode编辑器的熟悉

Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。

下面介绍环境搭建。

1 安装node js

在使用Electron进行开发之前,需要安装 Node.js。 建议使用最新的LTS版本。下载后直接安装,如果要更换路径,在安装时改下即可。

要检查 Node.js 是否正确安装,请在您的终端输入以下2个命令:

node -v
v18.16.0npm -v
9.5.1

这两个命令应输出了 Node.js 和 npm 的版本信息。

注意 因为 Electron 将 Node.js 嵌入到其二进制文件中,你应用运行时的 Node.js 版本与你系统中运行的 Node.js 版本无关。

2 npm换源

node js通过npm下载不同的模块,但是可能会因为网络原因下载缓慢或失败,建议换成国内源:

npm config set registry https://registry.npm.taobao.org# 检查是否成功切换
npm config get registry
https://registry.npm.taobao.org/

3 安装electron

建议先装cnpm,再通过它安装electron,不然直接装electron常常遇到各种失败,cnpm 是 npm 的定制版本,淘宝团队创建,其使用的是淘宝镜像,适用于中国大陆的开发者。

请使用管理员权限打开终端,再输入安装命令,否则可能出现各类权限问题。

可以全局安装,也可以实际进行项目时再在对应的工程下装,这边只用一个版本,采用的是全局安装,后续开发会方便点。

npm i cnpm -g
# -g全局安装
cnpm install electron -g

查看版本信息,完成安装

electron -vv24.1.2

4 第一个桌面应用

4.1 基础知识

一个基本的 Electron 程序主要由以下几部分组成:

  1. 主进程(Main Process): Electron 应用程序的主进程,负责控制整个应用程序的生命周期、处理系统级别的操作以及其他一些基础功能,主进程通常通过 Node.js API 实现,例如创建和启动渲染进程,处理菜单和快捷键事件等。

  2. 渲染进程(Renderer Process): Electron 应用程序的渲染进程,负责显示应用程序的用户界面和处理用户交互,渲染进程通常通过 Web 技术实现,例如 HTML,CSS 和 JavaScript,渲染进程可以通过与主进程通信来执行任务。

  3. 页面(Page): 渲染进程所显示的页面,通常由 HTML、CSS 和 JavaScript 构成,可以通过 HTML 中的 DOM(Document Object Model) 来访问和操作。

  4. 资源文件(Assets): 包括应用程序所需的各种文件(例如图像、样式表、JavaScript 库等)以及 Electron 应用程序的配置文件(例如 package.json,main.js 等)。

基本规则

GUI模块或者系统底层的模块只可以在主进程中使用。要使用这些模块,你应当很熟悉主进程vs渲染进程脚本的概念。

  • 主进程脚本看起来像个普通的nodejs脚本。
  • 渲染进程和传统的web界面一样,除了它具有使用node模块的能力。

主进程

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

渲染进程

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

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

主进程与渲染进程的区别

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

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

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

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

Electron 应用的目录结构

your-app/
|-- package.json
|-- main.js
|-- index.js
  • package.json的格式和 Node 的完全一致,并且那个被 main 字段声明的脚本文件是你的应用的启动脚本,它运行在主进程上。
  • main.js 应该用于创建窗口和处理系统时间。
  • 如果 main 字段没有在 package.json 声明,Electron会优先加载 index.js。

来源:Electron基础学习之Hello world! - 知乎 (zhihu.com)

4.2 具体例子

参考了官方教程: https://www.electronjs.org/zh/docs/latest/tutorial/quick-start 和 https://zhuanlan.zhihu.com/p/145219052?from_voters_page=true

(1)初始化

在终端命令行输入:

// 手动输入信息,如果嫌弃麻烦直接npm init -y 可以采用默认模板
npm init

init初始化命令会提示您在项目初始化配置中设置一些值 为本教程的目的,有几条规则需要遵循:

  • entry point 应为 main.js.
  • authordescription 可为任意值,但对于应用打包是必填项。

初始化后,会生成package.json文件,具体长这样:

{"name": "hello-electron","version": "1.0.0","description": "","main": "main.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}

之后要通过npm启动,需要在"scripts"中添加一行启动命令,记得里面的逗号不能少

,"start": "electron ./index.html"

具体如下:

{"name": "hello-electron","version": "1.0.0","description": "","main": "main.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "electron ./index.html"},"keywords": [],"author": "","license": "ISC"
}

如果不通过npm启动,直接用electron程序执行index.js脚本效果也是一样:electron index.html

(2)安装electron依赖

然后,将 electron 包安装到应用的开发依赖中,注意,如果之前‘‘第三步 安装electron‘’已经全局安装了electron,这一步可以省略。

npm install --save-dev electron
(3)新建main.js主进程文件

1)先新建一个main.js文件,输入代码如下:

var electron = require('electron');
var app = electron.app;
var BrowserWindow = electron.BrowserWindow;
var win = null;app.on('ready',function(){ win = new BrowserWindow({ webPreferences:{nodeIntegration: true} }); win.loadFile('index.html'); // 这边loadFile如果换成win.loadURL('http://www.baidu.com');,就变成一个精简版的浏览器了win.on('closed',function(){win=null}); 
});
app.on('window-all-closed', function(){app.quit();
});

这个代码也够简单的。不过对于不习惯JavaScript语法的同学,其实也没那么简单,没关系,先把代码运行起来,一定要注意这里的括号问题,可不要少了括号。

(4)新建index.html文件

代码如下:

<html><head><title> 窗口标题</title></head><body><div>hello world!</div></body>
</html>
(5)运行

在终端命令行输入:

npm start

运行成功。

4.3 打包程序

有很多种打包方式,这边用electron-builder。

(1)安装electron-builder
cnpm install electron-builder -g# 查看版本,看是否安装成功
electron-builder --version
23.6.0
(2)修改配置文件package.json

修改配置文件package.json,增加构建选项和依赖版本,具体如下,实际使用时请务必删除里面注释的内容,json中不支持注释方法,有特定的方法如增加 “comment” 属性,但是不建议。

// scripts增加这个构建工具字段,这边没有把全部内容打出来
"scripts": {"dist": "electron-builder"
},
// 增加以下构建字段
"build": {"productName": "electron-hello",   // 安装包文件名"directories": {"output": "dist"  // 安装包生成目录},"nsis": {"oneClick": false,  // 是否一键安装"allowToChangeInstallationDirectory": true    // 允许用户选择安装目录}
},
"devDependencies": {// 可以用^符号表示您安装的是 electron 包的 24.x.x 版本中的最新版本,如^24.1.2// 但是这边我试了会报错"  ⨯ Cannot compute electron version from installed node modules - none of the possible electron modules are installed.""electron": "24.1.2","electron-builder": "23.6.0"
}

devDependencies需要增加版本号,避免出现下面的问题:

  ⨯ Cannot compute electron version from installed node modules - none of the possible electron modules are installed.
(3)构建应用程序

在命令行中运行

npm run dist

命令,electron-builder 会自动构建和打包您的应用程序。

构建结果:

> hello-electron@1.0.0 dist
> electron-builder• electron-builder  version=23.6.0 os=10.0.19045• loaded configuration  file=package.json ("build" field)• writing effective config  file=dist\builder-effective-config.yaml• packaging       platform=win32 arch=x64 electron=24.1.2 appOutDir=dist\win-unpacked• default Electron icon is used  reason=application icon is not set• downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-2.6.0.7z size=5.6 MB parts=1• downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration=5m44.666s• building        target=nsis file=dist\electron-hello Setup 1.0.0.exe archs=x64 oneClick=false perMachine=false• downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.1/nsis-3.0.4.1.7z size=1.3 MB parts=1• downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.1/nsis-3.0.4.1.7z duration=2m1.633s• downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z size=731 kB parts=1• downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z duration=42.355s• building block map  blockMapFile=dist\electron-hello Setup 1.0.0.exe.blockmap

为了避免构建过程中下载依赖包缓慢,建议从 https://github.com/electron/electron/releases 下载最新发布所需的稳定版electron-vxxx-win32-x64.zip(根据平台选择),放入以下目录,不用解压

C:\Users\用户\AppData\Local\electron\Cache

从 https://github.com/electron-userland/electron-builder-binaries/releases/ 下载所需要的包。

根据需要把对应的压缩包复制到以下目录,比如这次需要的是winCodeSign,整个复制到Cache目录下,并解压到当前目录

C:\Users\用户名\AppData\Local\electron-builder\Cache
(4)安装并运行

dist目录下就是打包好的安装包,直接双击安装到所有用户,然后运行即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102376.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUC高级十二-ReentrantLock、ReentrantReadWriteLock、StampedLock

无锁→独占锁→读写锁→邮戳锁 1. 关于锁的大厂面试题 你知道Java里面有哪些锁?你说你用过读写锁&#xff0c;锁饥饿问题是什么&#xff1f;有没有比读写锁更快的锁&#xff1f;StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗&#xff1…

总结827

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;刷1800&#xff0c;做了26道计算题&#xff0c;记录两道错题&#xff0c;搞懂了&#xff0c;但并不…

家庭智能开关通断—Homekit智能

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…

HuggingFace入门教程--环境搭建

HuggingFace中文直译为”拥抱脸“&#xff0c;是最近非常火爆的一个人工智能社区&#xff0c;官网地址是&#xff1a;https://huggingface.co/ .关于HuggingFace的相关介绍大家可以自行百度。本文主要为刚入人工智能坑的小白指下路&#xff0c;同时也是逼着自己记录下学习过程中…

【ctfshow】命令执行->web29-web44

前言 半夜网抑云听歌听emo了 z 刷会儿题不然睡不着了呜呜呜 红中(hong_zh0) CSDN内容合伙人、2023年新星计划web安全方向导师、 华为MindSpore截至目前最年轻的优秀开发者、IK&N战队队长、 吉林师范大学网安大一的一名普通学生、搞网安论文拿了回大挑校二、 阿里云专家博…

线性链表 反转 -(递归与非递归算法)_20230420

线性链表 反转 -(递归与非递归算法)_20230420 前言 线性链表反转是非常有趣的算法&#xff0c;它可以采用多种方式实现&#xff0c;比较简洁的方法是递归反转&#xff1b;传统的方式是利用迭代反转&#xff0c;设定三个变量&#xff0c;采用类似滚动数组的方式&#xff0c;实…

qt中使用 ui 文件进行界面设计

目录 1、创建 Qt 应用 ​2、项目创建成功 3、直接点击打开 mainwindow.ui 文件 4、随便从左边侧边栏拖拽一个空间到 界面设计区域 5、在右侧边栏右键点击 pushButton 控件&#xff0c;点击转到槽 6、根据实际需要选择对应的信号&#xff0c;我这里方便演示选择 clicked&a…

SpringCloud --- Ribbon负载均衡

一、负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 二、源码跟踪 为什么我们只输入了service名称就…

【博学谷学习记录】超强总结,用心分享 | 架构师 MinIO学习总结

文章目录 MinIO对象存储的概念计算机数据存储系统-架构模式对象存储的优势常见的对象存储系统/服务&#xff08;Object Storage Service&#xff0c;OSS&#xff09; MinIO简介特点高级特性小结 MinIO部署基于 linux Binary 部署 MinIO ServerMinIO数据组织结构MinIO Client**基…

ISO-27145故障诊断说明

ISO-27145故障诊断说明 2.1 27145目录说明 ISO27145-1: 这里边介绍的是一般信息和用例定义&#xff1b; ISO27145-2: 这里边介绍的是与排放相关的通用数据规则&#xff0c;用于查询&#xff1b; ISO27145-3: 这里边主要介绍了支持的服务 12服务 14服务 19服务 22服务 31服务&…

「C/C++」C/C++强制类型转换

博客主页&#xff1a;何曾参静谧的博客 文章专栏&#xff1a;「C/C」C/C学习 目录 相关术语C语言中的强制类型转换C中的强制类型转换static_castdynamic_castreinterpret_castconst_cast 注意事项 相关术语 强制类型转换&#xff1a;是指将一个数据类型强制转换为另一个数据类型…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识&#xff08;十四&#xff09;&#xff1a;数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel&#xff08;xlsx&#xff09; 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

GoJS Beginner Tutorial #1

1.关系图&#xff1a; gojs部件由一个或多个gojs面板组成&#xff0c;这些面板包含和组织各种gojs图形对象 通常使用go.GraphObject.make创建一个GraphObject&#xff0c;我们通过使用$符号变量缩短了该函数的名称 这个函数的第一个参数&#xff0c;往往是你想要制作的GraphOb…

Centos切换jdk版本

先安装了jdk1.8的版本&#xff0c;需要使用jdk17的版本 1.先安装jdk17&#xff0c;再配置环境变量&#xff1a; vim ~/.bashrc 2.在最后一行添加 ##这个添加的就是路径&#xff0c;一定要和自己jdk安装的路径是一致的 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 3.然…

docker容器:docker镜像的三种创建方法及dockerfile案例

目录 一、基于现有镜像创建 1、创建启动镜像 2、生成新镜像 二、基于本地模板创建 1、OPENVZ 下载模板 2、导入容器生成镜像 三、基于dockerfile创建 1、dockerfile结构及分层 2、联合文件系统 3、docker镜像加载原理 4、dockerfile操作常用的指令 (1)FROM指令 (…

响应式布局

文章目录 响应式布局概述viewport 视口CSS 常用单位CSS 媒体查询语法直接使用使用style标签使用link引入 自适应布局栅格系统响应式布局案例rem媒体查询 响应式布局 概述 响应式布局是指网站或应用程序可以自适应不同的屏幕尺寸和设备类型&#xff0c;简而言之就是一个网站兼…

Sentinel同时配置fallback和blockHandler的问题

Spring Cloud在使用Sentinel进行服务降级和熔断时&#xff0c;如果同时配置了fallback和blockHandler&#xff0c;则在服务熔断后&#xff0c;抛出的BlockException不会再fallback逻辑中执行&#xff0c;而是在blockHandler逻辑中执行。 首先来看只配置了fallback的情况&#x…

常用的设计模式(单例模式、工厂模式等)

1.单例模式 概述: 在有些系统中&#xff0c;为了节省内存资源、保证数据内容的一致性&#xff0c;对某些类要求只能创建一个实例&#xff0c;这就是所谓的单例模式. 例如&#xff0c;Windows 中只能打开一个任务管理器&#xff0c;这样可以避免因打开多个任务管理器窗口而造…

战争教育策略游戏 MiracleGame,开启新阶段重塑生态和玩法

香港 Web3 区块链周刚刚在一片喧嚣中结束。各路大V、KOL 们的 report 都对 GameFi 的前景非常自信。2021-2023年期间&#xff0c;大量资金涌入 GameFi 赛道&#xff0c;GameFi 一旦爆发将会是现象级的出圈事件。 MiracleGame 是一款基于 BNB Chain 构建的英雄和元神主题的战争教…

HNCTF-re部分复现

目录 [HNCTF 2022 WEEK3]Help_Me! [HNCTF 2022 WEEK3]Whats 1n DLL? [HNCTF 2022 WEEK4]ez_maze 这几天在做HNCTF的week3&#xff0c;week4部分&#xff0c;学到了一些不知道的没接触过的东西&#xff0c;所以记录一下 [HNCTF 2022 WEEK3]Help_Me! 题目下载&#xff1a;下…