当前位置: 首页 > news >正文

快速创建桌面端(electron-egg)

介绍 | electron-egg

electron-egg: 一个入门简单、跨平台、企业级桌面软件开发框架。

electron-egg是一个基于Electron和Egg.js的框架,可以用于快速构建跨平台的桌面应用程序

1.兼容平台:electron-egg可以在Windows、MacOS和Linux等多个平台上运行。

2.简单易用:electron-egg提供了一些简单易用的API,窗口管理、菜单管理、文件操作等功能。

3.可定制化:electron-egg提供了丰富的插件和扩展机制,方便进行高度定制化。

安装 

# 下载
git clone https://gitee.com/dromara/electron-egg.git# 安装依赖
npm install# 启动
npm run start

目录说明

project
├── package.json npm包配置
├── bulid 打包用的资源和脚本├── icons 软件图标(打包用到)├── extraResources 额外资源目录
├── electron 主进程服务├── addon 插件目录├── example demo插件(代码示例)├── config 配置文件├── config.default.js 默认配置,都会加载├── config.local.js dev环境加载├── config.prod.js 生产环境加载├── encrypt.js 加密配置文件├── builder.json 打包配置├── controller 控制器├── service 业务层├── preload 预加载,在程序启动时加载,如托盘、自动升级等功能要提前加载代码├── jobs 任务
├── frontend 前端目录(demo是用vue编写的)    
├── out 打包后生成的可执行文件├── latest.yml 自动升级文件├── xxx.exe window应用安装包├── xxx.exe.blockmap window应用增量升级包├── xxx.dmg mac应用安装包├── xxx.deb linux应用安装包后缀有多种    
├── logs 日志 
├── main.js 入口文件 
├── public 资源目录├── dist 前端资源会移动到这里,生产环境加载├── electron 业务js加密后的文件├── html 一些模板├── images 一些图片
├── data 内置数据库文件├── system.json 框架使用的数据库├── demo.json 示例json数据库├── sqlite-demo.db 示例sqlite数据库

生命周期

// 引入基础 Application 类
const { Application } = require('ee-core');class Index extends Application {constructor() {super();}/*** core app have been loaded* 加载* config -> service -> controller -> socket -> ready()*/async ready () {// do some things}/*** electron app ready* 加载以下事件* app.on('second-instance')* app.whenReady().then() 该事件会创建 mainWindow* app.on('window-all-closed')* app.on('before-quit')* 然后触发* -> electronAppReady()*/async electronAppReady () {// do some things}/*** main window have been loaded* mainWindow 被创建后,加载* windowReady() -> addon  -> preload*/async windowReady () {// do some things// 延迟加载,无白屏const winOpt = this.config.windowsOption;if (winOpt.show == false) {const win = this.electron.mainWindow;win.once('ready-to-show', () => {win.show();})}}/*** before app close*/  async beforeClose () {// do some things}
}Index.toString = () => '[class Index]';
module.exports = Index;

控制器

const { Controller } = require('ee-core');
const Services = require('ee-core/services');/*** 示例控制器* @class*/
class ExampleController extends Controller {constructor(ctx) {super(ctx);}/*** 所有方法接收两个参数* @param args 前端传的参数* @param event - ipc通信时才有值。详情见:控制器文档*//*** test*/async test (args, event) {// 前端参数const params = args;// 调用serviceconst result = await Services.get('example').test('electron');// 主动向前端发请求// channel 前端ipc.on(),监听的路由const channel = "controller.example.something"// IpcMainInvokeEventevent.reply(channel, {age:21})// IpcMainEventevent.sender.send(`${channel}`, data)// 返回数据const data = {}return data;}
}  

服务层

const { Service } = require('ee-core');
const Services = require('ee-core/services');/*** 示例服务* @class*/
class ExampleService extends Service {constructor(ctx) {super(ctx);}/*** test*/async test (args, event) {let obj = {status:'ok',params: args}// 调用其它serviceServices.get('framework').test('egg');// 主动向前端发请求// channel 前端ipc.on(),监听的路由const channel = "controller.example.something"// controller 传入 event// IpcMainInvokeEventevent.reply(channel, {age:21})// IpcMainEventevent.sender.send(`${channel}`, {age:21})return obj;}
}ExampleService.toString = () => '[class ExampleService]';
module.exports = ExampleService;

 

相关文章:

快速创建桌面端(electron-egg)

介绍 | electron-egg electron-egg: 一个入门简单、跨平台、企业级桌面软件开发框架。 electron-egg是一个基于Electron和Egg.js的框架,可以用于快速构建跨平台的桌面应用程序。 1.兼容平台:electron-egg可以在Windows、MacOS和Linux等多个平台上运行…...

docker配置redis插件

docker配置redis插件 运行容器redis_6390 docker run -it \ --name redis_6390 \ --privileged \ -p 6390:6379 \ --network wn_docker_net \ --ip 172.18.12.19 \ --sysctl net.core.somaxconn1024 \ -e TIME_ZONE"Asia/Shanghai" -e TZ"Asia/Shanghai"…...

前端入口教程_web01

web标准 记得看! html:表示整个页面 head: titile: body: 常用标签 1.标题标签 2.段落标签 3.换行标签 4.文本格式化标签 5. 和 标签 6.图像标签 相对路径–用来插自己本地的图片 #### 绝对路径–用来插网上找的图…...

Win7 SP1 x64 Google Chrome 字体模糊

1 打开 Google Chrome ,地址栏输入 chrome://version/ ,字体模糊。 2 Microsoft Update Catalog 搜索更新 kb2670838,下载,安装,重启电脑。 3 打开 Google Chrome,地址栏输入 chrome://version/ &#xff0…...

read()之后操作系统都干了什么

首先说明三个参数 file文件 buff从内存中开辟一段缓冲区用来接收读取的数据 size表示这个缓冲区的大小 有关file的参数: 状态:被打开 被关闭权限:可读可写最重要的是inode: 他包含了 文件的元数据(比如文件大小 文件类型 文件在访问前需要加…...

YoloV8改进策略:Swift Parameter-free Attention,无参注意力机制,超分模型的完美迁移

摘要 https://arxiv.org/pdf/2311.12770.pdf https://github.com/hongyuanyu/SPAN SPAN是一种超分网络模型。SPAN模型通过使用参数自由的注意力机制来提高SISR的性能。这种注意力机制能够增强重要信息并减少冗余,从而在图像超分辨率过程中提高图像质量。 具体来说,SPAN模…...

Python----练习:使用面向对象实现报名系统开发

第一步:分析哪些动作是由哪些实体发出的 学生提出报名 学生提供相关资料 学生缴费 机构收费 教师分配教室 班级增加学生信息 于是,在整个过程中,一共有四个实体:学生、机构、教师、班级!在现实中的一个具体的实…...

1.什么是html

1.什么是html什么是html? 一.基础信息 英文名字:HyperText Markup Language 中文名字:超文本标记语言 简称:html 文件格式:.htm 或 .html 结尾 作用:描述网页的语言。通过各种各样的标签,组…...

GeoServer漏洞(CVE-2023-25157)

前半部分是sql注入一些语句的测试,后面是漏洞的复现和利用 Sql注入漏洞 1.登入mysql。 2.查看默认数据库 3.使用mysql数据库 4.查看表 1.查看user 表 2.写注入语句 创建数据库 时间注入语句 布尔注入语句 报错注入语句 Geoserver漏洞&#xff…...

一个完整的手工构建的cuda动态链接库工程 03记

1&#xff0c; 源代码 仅仅是加入了模板函数和对应的 .cuh文件&#xff0c;当前的目录结构如下&#xff1a; icmm/gpu/add.cu #include <stdio.h> #include <cuda_runtime.h>#include "inc/add.cuh"// different name in this level for different type…...

rdf-file:SM2加解密

一&#xff1a;SM2简介 SM2是中国密码学算法标准中的一种非对称加密算法&#xff08;包括公钥和私钥&#xff09;。SM2主要用于数字签名、密钥交换和加密解密等密码学。 生成秘钥&#xff1a;用于生成一对公钥和私钥。公钥&#xff1a;用于加密数据和验证数字签名。私钥&…...

harmonyOS学习笔记之@Styles装饰器与@Extend装饰器

Styles装饰器 定义组件重用样式 自定义样式函数使用装饰器 可以定义在组件内或全局,内部优先级>外部,内部不需要function,外部需要function 定义在组件内的styles可以通过this访问组件内部的常量和状态变量,可以在styles里通过事件来改变状态变量 弊端:只支持通用属性和通用…...

GateWay的路由与全局过滤器

1.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePr…...

MuleSoft 中的细粒度与粗粒度 API

API 设计是一个令人着迷的话题。API 设计的一个重要方面是根据 API 的特性和功能确定正确的“大小”。所有建筑师都必须在某个时候解决过这个问题。在本文中&#xff0c;我将尝试对我们在获得“正确的”粒度 API 之前需要考虑的各种参数进行一些深入的探讨&#xff1a; 可维护…...

【笔记】2023最新Python安装教程(Windows 11)

&#x1f388;欢迎加群交流&#xff08;备注&#xff1a;csdn&#xff09;&#x1f388; ✨✨✨https://ling71.cn/hmf.jpg✨✨✨ &#x1f913;前言 作为一名经验丰富的CV工程师&#xff0c;今天我将带大家在全新的Windows 11系统上安装Python。无论你是编程新手还是老手&…...

Android Wifi断开问题分析和802.11原因码

Android Wifi连接和断链分析思路。 1.密码错误导致的连接失败 2.关联被拒绝 3.热点未回复AUTH_RSP或者STA未收到 AUTH_RSP 4.热点未回复ASSOC_RSP或者STA未收到ASSOC_RSP 5.DHCP FAILURE 6.发生roaming 7.AP发送了DEAUTH帧导致断开连接 8.被AP踢出&#xff0c;这个原因…...

【Cell Signaling + 神经递质(neurotransmitter) ; 神经肽 】

Neuroscience EndocytosisExcitatory synapse pathwayGlutamatergic synapseInflammatory PainInhibitors of axonal regenerationNeurotrophin signaling pathwaySecreted Extracellular VesiclesSynaptic vesicle cycle...

当springsecurity出现SerializationException问题

当springsecurity出现SerializationException问题 01 异常发生场景 当我使用springsecurity时&#xff0c;登录成功后携带token访问接口出了问题 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field "userna…...

[SaaS] 广告创意中stable-diffusion的应用

深度对谈&#xff1a;广告创意领域中 AIGC 的应用这个领域非常快速发展&#xff0c;所以你应该保持好奇心&#xff0c;不断尝试新事物&#xff0c;不断挑战自己。https://mp.weixin.qq.com/s/ux9iEABNois3y4wwyaDzAQ我对AIGC领域应用调研&#xff0c;除了MaaS服务之外&#xff…...

第八节HarmonyOS @Component自定义组件的生命周期

在开始之前&#xff0c;我们先明确自定义组件和页面的关系&#xff1a; 1、自定义组件&#xff1a;Component装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。 2、页面&#xff1a;即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定…...

Windows 11任务栏透明化完整教程:TranslucentTB让你的桌面焕然一新

Windows 11任务栏透明化完整教程&#xff1a;TranslucentTB让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想让Windo…...

用emWin定时器在STM32上做个简易秒表:从对话框UI到后台逻辑的完整实现

用emWin定时器在STM32上实现高精度秒表&#xff1a;从UI设计到多任务协同的工程实践 在嵌入式GUI开发中&#xff0c;精确的时间控制往往决定着用户体验的成败。当我们需要在STM32平台上实现一个毫秒级响应的秒表应用时&#xff0c;emWin的窗口管理器定时器(WM_TIMER)便成为连接…...

Python 异步HTTP客户端实战:aiohttp深度解析

Python 异步HTTP客户端实战&#xff1a;aiohttp深度解析 引言 在现代Python后端开发中&#xff0c;异步HTTP客户端是构建高性能服务的关键组件。作为一名从Rust转向Python的后端开发者&#xff0c;我深刻体会到异步编程在处理大量并发请求时的优势。aiohttp作为Python生态中最流…...

用Python自动化Photoshop:解锁高效图像处理的终极指南

用Python自动化Photoshop&#xff1a;解锁高效图像处理的终极指南 【免费下载链接】photoshop-python-api Python API for Photoshop. 项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api Photoshop Python API 是一款强大的工具包&#xff0c;让开发者…...

别再瞎调了!OpenCV手动曝光参数CAP_PROP_EXPOSURE与快门时间换算表(附Python/C++代码)

OpenCV曝光参数与快门时间实战指南&#xff1a;从原理到精准控制 在计算机视觉项目中&#xff0c;摄像头曝光控制往往是影响图像质量的关键因素之一。许多开发者在使用OpenCV的CAP_PROP_EXPOSURE参数时&#xff0c;都会遇到一个共同的困惑&#xff1a;为什么设置的值是-13而不…...

Lie群方法在机器人状态估计中的创新应用

1. 状态估计技术演进与Lie群方法的核心价值在机器人导航与定位领域&#xff0c;状态估计技术扮演着大脑的角色。想象一下&#xff0c;当你在陌生城市使用手机导航时&#xff0c;系统需要实时融合GPS、陀螺仪和加速度计的数据来确定你的位置——这正是状态估计的典型应用场景。传…...

第十章:C++ 迷你单元测试框架

第十章:C++ 迷你单元测试框架 本章从"写业务"切换到"写工具"。前 9 个案例都是给最终用户看的应用;本案例要做的是给其他程序员用的库——一个百行代码、头文件 only 的单元测试框架(类似 Catch2 的最小骨架)。你将集中练习三件被前 9 个案例覆盖不到位…...

收藏!AI黄金三年,小白也能入局的5大高薪岗位解析

文章分析了AI应用与智能体时代的就业趋势&#xff0c;指出AI正重塑各岗位能力结构并创造新职业。未来三年&#xff0c;企业对AI应用工程师、AIAgent设计师、AI自动化运营、AI产品经理及RAG应用构建等岗位需求激增&#xff0c;这些岗位门槛相对较低但薪资可观。文章强调&#xf…...

从图形变换到机器学习:行列式到底在‘衡量’什么?一个直观的几何理解指南

从图形变换到机器学习&#xff1a;行列式到底在‘衡量’什么&#xff1f;一个直观的几何理解指南 想象你手中有一张弹性薄膜&#xff0c;拉伸、旋转或挤压它时&#xff0c;薄膜覆盖的面积会如何变化&#xff1f;这种直观的几何变换背后&#xff0c;隐藏着线性代数中行列式的本质…...

STM32F103C8T6驱动MAX30102:从CubeMX配置到心率可视化,一个LED灯带你看懂心跳

STM32F103C8T6驱动MAX30102&#xff1a;从硬件交互到心跳可视化实战 当你第一次看到LED灯随着自己的心跳节奏闪烁时&#xff0c;那种将生物信号转化为物理反馈的奇妙体验&#xff0c;正是嵌入式开发的魅力所在。本文将带你用STM32F103C8T6和MAX30102血氧传感器&#xff0c;打造…...