Electron-(一)创建桌面应用

一、概述

本文通过核心步骤介绍,形成使用Electron进行桌面应用创建的概述性内容。
在当今的软件开发领域,Electron 作为一款强大的工具,为开发者提供了一种便捷的方式来创建跨平台的桌面应用。本文将通过详细介绍核心步骤,带您领略使用 Electron 进行桌面应用创建的全过程。
首先,让我们来看看工程成果目录的构成。这里有build、release、src等多个重要部分。build文件夹像是一个幕后的操控室,放置着制作安装程序的脚步,每一步都精心编排,为最终的应用安装奠定基础。release则是胜利的果实,打包完成的文件夹以及生成的安装程序都安静地躺在里面,等待着被用户发现和使用。而src文件夹,无疑是整个项目的心脏,核心代码都在这里跳动,驱动着应用的各项功能。corner.js像是一个智慧的管家,负责系统的配置管理,确保各个部分协调运作。index.js则是启动的引擎,点燃应用启动的火焰。preload.js更是一座桥梁,巧妙地建立起渲染进程和主进程之间的关系通信,让信息在两个世界之间顺畅传递。
工程成果目录:

工程目录

其中:

  1. build 放置制作了Installer的脚步;
  2. release 打包完成的文件夹以及生成的Installer;
  3. src 核心代码
  4. corner.js 系统的和下配置
  5. index.js 系统启动函数
  6. preload.js 渲染进程和主进程之间的关系通信建立

二、创建步骤

按照以下基本进行创建:创建工程→创建初始化加载动画→运行

1. 创建工程

命令如下:

# 初始化工程
npm init;
# 安装electron
npm install electron --save-dev;

生成的package.json文件如下:

{
  ...
  "devDependencies": {
    "asar": "^3.2.0",
    "electron": "^32.1.2",
  }
  ...
}
2. 创建初始化加载动画

为了在主窗口启动时候,能够过渡性的加载,同时能够在启动主窗口前检查待加载的url地址,在过渡窗口中进行动画显示。

为了给用户带来更好的体验,在主窗口启动时设置一个过渡性的加载动画是非常必要的。这个动画不仅能够在视觉上缓解用户等待的焦虑,还能在启动主窗口前对待加载的url地址进行检查。想象一下,当用户打开应用时,首先看到的是一个充满活力的过渡窗口,里面的动画像一个小精灵在欢快地跳动,展示着加载的进度。核心代码部分就像是这个小精灵的魔法咒语。通过const { ipcRenderer } = window.require(‘electron’);获取到与主进程通信的工具,然后ipcRenderer.send(‘loading-win-opened’);就像是向主进程发送了一个启动信号。接着,ipcRenderer.on(‘loading-step-info’, (event, data) => {…})则是在监听主进程的回复,根据回复的数据,在页面上动态地更新加载信息,就像小精灵根据魔法咒语的反馈不断调整自己的动作。

效果如下:

加载动画

核心代码:

const { ipcRenderer } = window.require('electron');
// 向主进程发送消息
ipcRenderer.send('loading-win-opened');

// 监听主进程的回复
ipcRenderer.on('loading-step-info', (event, data) => {
  const infoContainer = document.getElementById("info");
  const cls = data.res === false ? 'info-fail' : 'info-success';
  infoContainer.innerHTML = `
    <span id="info-title">${data.title}</span>
    <span id="info-content">${data.content}</span>
    <span id="info-finishInfo" class="${cls}">${data.finishInfo}</span>
    <span id="info-progress">${data.progress}</span>`
});
3. 运行

在package.json中配置调试命令:

···
{
    "start": "electron --trace-warnings .",
}
···
npm run start;

,如果控制台乱码,请在start命令中增加chcp 65001 && ,最终如下:

···
{
    "start": "chcp 65001 && electron --trace-warnings .",
}
···

三、package.js

在package.js中指定启动的应用入口。

最终的package.js完整如下:

{
  "name": "your-app-name",
  "version": "1.0.0",
  "description": "your-app-name-description",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "start": "chcp 65001 && electron --trace-warnings . --nocache"
  },
  "keywords": [],
  "author": "your name",
  "license": "your license",
  "devDependencies": {
    "electron": "^32.1.2",
  },
  "dependencies": {
  }
}

四、index.js文件

在index.js中启动主窗口,并进行一定的设置等:

在index.js中,核心的功能是启动主窗口并进行一系列的设置。
createMainWindow函数就像是一个神奇的工匠,精心打造着主窗口。

  • 首先,通过const win = new BrowserWindow({...})创建一个浏览器窗口,设置了窗口的显示属性(如show: false,开始时不显示)、全屏可操作性(fullScreenable: true)、最小尺寸(minWidth: 800,minHeight: 800)等。
  • 同时,在webPreferences中指定了preload: path.join(__dirname, "preload.js"),确保渲染进程和主进程之间的通信桥梁得以建立。窗口的图标通过icon: path.join(__dirname, "./src/resource/favicon.ico")设置。
  • 然后,configExit(win);为窗口注册了退出事件,win.loadURL(config.homePath);加载了指定的url。
  • 接着,handleArgs(win);处理了相关的参数,config.debugMode && win.webContents.openDevTools();根据配置决定是否打开开发工具,
  • 最后startSurveil(win);启动了对窗口的监视功能,返回的win就是打造好的主窗口,准备好迎接用户的使用。
/**
 * 创建浏览器窗口
 */
const createMainWindow = () => {
  // Create the browser window.
  const win = new BrowserWindow({
    show: false,
    fullScreenable: true,
    minWidth: 800,
    minHeight: 800,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
    },
    icon: path.join(__dirname, "./src/resource/favicon.ico"),
  });
  configExit(win);
  win.loadURL(config.homePath);

  handleArgs(win);
  // 打开开发工具
  config.debugMode && win.webContents.openDevTools();

  startSurveil(win);
  return win;
};

五、总结

主要步骤基本就是上述几个步骤,使用Electron,将网页版的应用之间封装为一个桌面应用。

详细的代码,我将会在博客的其他文章中详细介绍。

主要包括:

  1. 启动动画界面
  2. 日志系统
  3. 传统桌面菜单
  4. 网页内应用监听
  5. 打包、安装包制作

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

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

相关文章

PPT自动化:掌握 python-pptx 的基础元素

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT 📒📝 什么是 Slide?📝 了解 Shape📝 深入 Paragraph📝 探索 Run⚓️ 相关链接 ⚓️📖 介绍 📖 初学python-pptx,掌握 python-pptx 与 PPT 元素的对应关系是至关重要的一步。今天,我们一起来了解一下 PPT 中…

Python基于OpenCV的实时疲劳检测

2.检测方法 1&#xff09;方法 与用于计算眨眼的传统图像处理方法不同&#xff0c;该方法通常涉及以下几种组合&#xff1a; 1、眼睛定位。 2、阈值找到眼睛的白色。 3、确定眼睛的“白色”区域是否消失了一段时间&#xff08;表示眨眼&#xff09;。 相反&#xff0c;眼睛长…

【Redis】数据结构(中)----ZipList(压缩列表)

文章目录 ZipList(压缩列表)概念ZipList的结构Entry的内部结构previous_entry_lengthEncoding存储字符串存储整数 content ZipList会存在的问题查询中间数据连锁更新 总结 ZipList(压缩列表) 概念 ZipList是一种特殊的"双端链表",由一系列特殊编码的连续内存块组成…

解决Git拉取项目后右侧边栏无Maven的问题

从gitlab上拉取新项目&#xff0c;当你配置好maven仓库地址&#xff0c;配置文件&#xff0c;各种库都配置好了&#xff0c;但是没有Maven&#xff0c;找不到下图的package因此打包不了项目解决办法 非常简单&#xff0c;只需一步&#xff01; 右击项目里面的pom.xml,再点击add…

uniapp小程序自定义聚合点

注&#xff1a; 1.默认的聚合点可以点击自动展示子级点位&#xff0c;但是自定义的聚合点在ios上无法触发markerClusterClick的监听&#xff0c;至今未解决&#xff0c;不知啥原因 2.ios和安卓展示的点位样式还有有差别 源码附上 <template><view class"marke…

算法——python实现归并排序

文章目录 归并排序NB三人组总结 归并排序 """ 归并排序 """""" 时间复杂度 &#xff1a; O(N*logN) 空间复杂度 &#xff1a; O(N) 需要额外生成一个临时变量&#xff0c;最大是N长 思路&#xf…

[Linux网络编程]03-TCP协议

一.TCP协议数据通信的过程 TCP数据报如下&#xff0c;数据报中的标志位双端通信的关键。 三次握手: 1.客户端向服务端发送SYN标志位&#xff0c;请求建立连接&#xff0c;同时发送空包 2.服务端向客户端回发ACK标志位(即确认标志位&#xff0c;任何一端发送数据后都需要另一端…

Nginx UI 一个可以管理Nginx的图形化界面工具

Nginx UI 是一个基于 Web 的图形界面管理工具&#xff0c;支持对 Nginx 的各项配置和状态进行直观的操作和监控。 Nginx UI 的功能非常丰富&#xff1a; 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 在线 ChatGPT 助理 一键申请和自动续签 Let’s encrypt 证书 在…

[JAVAEE] 线程安全问题

目录 一. 什么是线程安全 二. 线程安全问题产生的原因 三. 线程安全问题的解决 3.1 解决修改操作不是原子性的问题 > 加锁 a. 什么是锁 b. 没有加锁时 c. 加锁时 d. 死锁 e. 避免死锁 3.2 解决内存可见性的问题 > volatile关键字 (易变的, 善变的) a. 不加…

C++ string的精讲

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 前言 string是标准库中的一个类&#xff0c;它位于<string>头文件中。这个类提供…

Python算法——链表(反转链表,合并两个排序链表,判断是否有环,链表中倒数最后k个结点,第一个公共结点,删除重复元素)

哈喽大家好&#xff0c;好久不见&#xff01;又进入新的一个学期&#xff0c;这学期小编要进行python的算法学习啦&#xff0c;今天更新链表的部分题目~ 牛客 NC78 反转链表 题目如下&#xff1a; 算法思想如下&#xff1a; 1.初始化两个指针pre和cur&#xff0c;分别表示前驱…

ERROR [internal] load metadata for docker.io/library/nginx:latest

docker执行错误解决方法 1、执行docker pull nginx2、docker build -t xxx:xx

Ai环境安装教程

依赖的驱动软件 python3.115cuda11.4torch2.0.1 一。如何下载安装 一、驱动下载 【Python链接】https://www.python.org/ftp/python/3.11.5/python-3.11.5-amd64.exe 【CUDA链接】https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4…

从 Microsoft 官网下载 Windows 10

方法一&#xff1a; 打开 Microsoft 官网&#xff1a; 打开开发人员工具&#xff08;按 F12 或右键点击“检查”&#xff09;。 点击“电脑模拟手机”按钮&#xff0c;即下图&#xff1a; 点击后重新加载此网页&#xff0c;即可看到下载选项。

成都睿明智科技有限公司共创抖音电商新篇章

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多商家竞相追逐的新蓝海。在这片充满机遇与挑战的领域中&#xff0c;成都睿明智科技有限公司凭借其专业的服务、创新的策略和敏锐的市场洞察力&#xff0c;成为了众多商家信赖的合…

Notepad++将搜索内容所在行选中,并进行复制等操作

背景 Notepad在非常多的数据行内容中&#xff0c;按照指定内容检索&#xff0c;并定位到具体行&#xff0c;而后对内容行的数据进行复制、剪切、删除等处理动作。 操作说明 检索并标记所在行 弹出搜索框&#xff1a;按下 Ctrl F。 输入查找字符串&#xff1a;在搜索框中输入要…

房屋租赁管理系统|基于java和小程序的房屋租赁管理系统小程序设计与实现(源码+数据库+文档)

房屋租赁管理系统小程序 目录 基于java和小程序的房屋租赁管理系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

java项目之精准扶贫管理系统源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的精准扶贫管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 精准扶贫管理系统的主要…

STM32重拾+找工作MD

1.工程文件创建 外部的文件夹要和工程文件对应&#xff0c;也就是外面创建好之后&#xff0c;里面也要对应添加&#xff1b; 首先是startup启动文件&#xff0c;这个是程序执行最基本的文件&#xff0c;keil中启动文件是用汇编写的&#xff0c;启动文件内定义了中断向量表&…

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇&#xff0c;本篇主要是介绍Java的一些基础内容&#xff1a; 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系&#xff1f; 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…