eletron入门教程 -- 快速写一个electron demo程序

1、前言

        由于工作需要,前段时间基于electron框架开发了一个桌面应用程序。由于我之前主要是做c++后端开发,所以没有任何electron基础,也没有任何前端开发基础,但是没有办法,老板需要,那就得会,不会就得学。经过一段时间的开发,也积累了一点electron框架和前端开发的经验,借此机会总结一下,一是记录自己的一个学习过程,另外也希望可以帮助到有需要的人。

2、electron相关理论知识学习

        electron相关的文档和博客应该也不少,对于刚入门的开发者,推荐官方文档,这个文档比较系统,学习起来也比较容易。具体知识就不再赘述了,直接贴上链接:

Electron是什么?

3、如何开始一个简单的electron demo程序

3.1 依赖安装

        由于electron框架是基于Node.js,因此需要先安装node.js。如果没有安装node.js请自行安装好node.js,并设置好环境变量。

        可以在cmd命令窗口中输入:

node -v

如果node.js安装成功,会显示版本号。如下所示:


3.2 官方入门教程

        官方给出了一个简单的教程,可以快速创建第一个electron程序。创建一个简单electron程序,可以主要分为四个步骤:

3.2.1 创建目录并初始化

       最开始需要新建一个工程目录,并进行初始化。

        以管理员身份打开cmd窗口,创建一个目录,并进行初始化:

mkdir my-electron-app && cd my-electron-app  
npm init

这一步完成之后,会在my-electron-app目录下面生成一个package.json文件。

3.2.2 安装electron依赖包

npm install --save-dev electron

        为了让electron能够在开发模式之下,通过start命令运行程序,需要在package.json文件scripts字段下面增加一条start命令:

{"scripts": {"start": "electron ."}
}

3.2.3 创建主程序

创建主程序main.js:

// main.js// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('node:path')const createWindow = () => {// Create the browser window.const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js')}})// 加载 index.htmlmainWindow.loadFile('index.html')// 打开开发工具// mainWindow.webContents.openDevTools()
}// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {createWindow()app.on('activate', () => {// 在 macOS 系统内, 如果没有已开启的应用窗口// 点击托盘图标时通常会重新创建一个新窗口if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit()
})// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件,然后用 require 导入。

3.2.4 创建页面

创建页面文件index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"><title>Hello World!</title></head><body><h1>Hello World!</h1>We are using Node.js <span id="node-version"></span>,Chromium <span id="chrome-version"></span>,and Electron <span id="electron-version"></span>.</body>
</html>

3.2.5 创建预加载程序

创建与加载程序preload.js:

// preload.js// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {const replaceText = (selector, text) => {const element = document.getElementById(selector)if (element) element.innerText = text}for (const dependency of ['chrome', 'node', 'electron']) {replaceText(`${dependency}-version`, process.versions[dependency])}
})

3.3 可能遇到问题 -- 安装electron依赖失败

      如果根据上面的总结步骤,结合官方的教程,一步一步操作下面,应该没有什么难度。可能会在安装3.2.2安装electron依赖包时失败,因为国内网络的原因,从官方镜像源下载速度可能很慢,一般设置一下镜像源就好。在my-electron-app目录下面需要新建一个.npmrc文件,内容如下:

registry=https://registry.npmmirror.com
electron_mirror=https://cdn.npmmirror.com/binaries/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/

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

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

相关文章

【java】常见面试题目

文章目录 一、JAVA基础篇二、多线程篇三、SQL篇四、No-SQL篇五、MQ篇六、框架篇七、JVM篇八、常见算法题 一、JAVA基础篇 1、ConcurrentHashMap是如何保证线程安全的&#xff0c;HashMap为什么是线程不安全的? HashTable为什么是线程安全的&#xff0c;HashSet为什么是线程不…

前端开发工程师——数据可视化

canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…

如何使用KNN

导入文件和库 加载数据集、拆分数据集 训练模型 预测 打印结果

自从有了可观测性,传统运维如何进行提升?

在 201x 年&#xff0c;随着容器技术的出现&#xff0c;容器的部署方式逐渐被各大互联网公司采用&#xff0c;相比物理机/虚拟机&#xff0c;容器的好处是环境隔离、轻量、快速。 但是管理容器是一件复杂的事情&#xff0c;后来出现了 Kubernetes&#xff0c;成为了事实上的容…

加拿大门户媒体《金融邮报》《埃德蒙顿日报》新闻媒体投放

介绍 加拿大媒体广告投放是企业宣传推广的重要手段之一。在加拿大&#xff0c;主流媒体包括《金融邮报》和《埃德蒙顿日报》。《金融邮报》是加拿大唯一的全国性英文金融日报&#xff0c;总部位于多伦多&#xff0c;具有丰富的金融消息资源&#xff0c;可反映加拿大商界各方面…

Oracle实践|内置函数之日期与时间函数

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

五分钟”手撕“异常

目录 一、什么是异常 二、异常的体系和分类 三、异常的处理 1.抛出异常 2.异常的捕获 异常声明throws&#xff1a; try-catch处理 四、finally finally一定会被执行吗&#xff1f; 五、throw和throws区别 六、异常处理的流程 七、自定义异常 一、什么是异常 顾名…

大模型额外篇章二:基于chalm3或Llama2-7b训练酒店助手模型

文章目录 一、代码部分讲解二、实际部署步骤(CHALM3训练步骤)1)注册AutoDL官网实名认证2)花费额度挑选GPU3)准备实验环境4)开始执行脚本5)从浏览器访问6)可以开始提问7)开始微调模型8)测试训练后的模型三、基于Llama2-7b的训练四、额外补充1)修改参数后2)如果需要访问…

PHP:open_basedir restriction in effect.

当我们下载了组件&#xff0c;引入的时候出现 open_basedir restriction in effect&#xff0c;那这个时候我们该怎么弄呢&#xff1f; 首先我们进入宝塔管理页面&#xff1a;【软件商店】-【运行环境】-【安装PHP】-【设置】 其中后面的路径是用 : 来分隔表示多少个&#xff…

指纹识别系统架构

目录 1. 系统架构 1.1 指纹采集模块 1.2 指纹处理模块 1.3 指纹登记模块 1.4 指纹识别模块 1.5 指纹识别决策模块 1.6 管理模块 1.6.1 存储管理 1.6.2 传输管理 1.6.3 安全管理 1.7 应用开放功能 1.7.1 指纹登记功能 1.7.2 指纹验证功能 1.7.3 指纹辨识功能 2. …

OnlyOffice 7.4 版本打开文件时提示:文档安全令牌未正确形成。

OnlyOffice 7.4 版本打开文件时提示&#xff1a;文档安全令牌未正确形成。 笔记&#xff0c;springboot项目融合Onlyoffice时&#xff0c;出现的问题&#xff0c;解决后记录一下 笔记&#xff0c;springboot项目融合Onlyoffice时&#xff0c;出现的问题&#xff0c;解决后记录一…

Android Studio制作简单登录界面

Android Studio制作简单登录界面 实现目标 应用线性布局设计登录界面&#xff0c;要求点击输入学号时弹出数字键盘界面&#xff0c;点击输入密码时弹出字母键盘&#xff0c;出现的文字、数字、尺寸等全部在values文件夹下相应.xml文件中设置好&#xff0c;使用时直接引用。当…

如何使用perf 统计cpu和内存?

文章目录 0. 概要1. 使用perf统计CPU和内存的结果示例1.1 **统计CPU时钟周期&#xff1a;**1.2 **统计指令数量&#xff1a;**1.3 **统计缓存命中率&#xff1a;**1.4 **统计内存带宽的示例输出** 2 **注意&#xff1a;** 0. 概要 PMU&#xff08;Performance Monitoring Unit…

蓝桥杯物联网竞赛_STM32L071KBU6_关于size of函数产生的BUG

首先现象是我在用LORA发送信息的时候&#xff0c;左边显示长度是8而右边接收到的数据长度却是4 我以为是OLED显示屏坏了&#xff0c;又或者是我想搞创新用了const char* 类型强制转换数据的原因&#xff0c;结果发现都不是 void Function_SendMsg( unsigned char* data){unsi…

学习笔记——交通安全分析02

目录 前言 当天学习笔记整理 绪论 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 当天学习笔记整理 绪论 美国在道路设施安全改善过程中&#xff0c;形成了数据基…

并查集的实现(C++)

之前我已经写过一期的并查集的内容&#xff0c;这里主要是实现并查集的整体结构&#xff1a; #pragma once //并查集&#xff1a;class UnionFindSet//父母表示法; { public://构造函数&#xff1a;UnionFindSet(size_t size0):_ufs(size,-1){}//合并元素;bool Union(int x, i…

【云原生】Kubernetes基础命令合集

目录 引言 一、命令概述 &#xff08;一&#xff09;命令分类 &#xff08;二&#xff09;基本语法 二、查看基本信息 &#xff08;一&#xff09;环境指令 1.查看版本信息 2.查看资源对象简写 3.添加补全信息 4.查看日志 5.查看集群信息 &#xff08;二&#xff0…

数据结构(三)

数据结构&#xff08;三&#xff09; 图状关系顺序存储链式存储十字链表法多重链表法 图的遍历佛洛依德算法迪杰斯特拉算法洪水算法 图状关系 按有无方向分&#xff1a;有向图、无向图 按是否有权值&#xff1a;带权图、不带权图 顺序存储 链式存储 十字链表法 多重链表法 图…

【笔记】软件架构师要点记录(2)

【笔记】软件架构师要点记录 20240523案例一案例二案例三案例四案例五案例六案例七案例十 20240523 基于前10个架构案例场景&#xff0c;对用到的专业术语进行整理&#xff0c;方便后续查看。 案例一 MVC架构风格组件交互方式 MVC是一种用来构建用户界面时采用的架构设计风格…

springboot整合chatgpt,并且让其可以记录上下文

整合很简单&#xff0c;不过需要几个小条件 1.必须要有openai官方的key 2.国内需要有代理服务器或者国外的服务器把项目部署出去也没问题 我没有使用spring的springAI&#xff0c;听说很方便&#xff0c;日后有机会去体验体验&#xff0c;我今天用了两种方式整合了gpt 1.Ch…