2.第一个Electron程序

目录

    • 一、前言
    • 二、基本运行结构
    • 三、代码详解
    • 四、打包

一、前言

原文以及系列文章后续请参考:第一个Electron程序

上一章我们完成了Electron的环境搭建,本章就开始详解如何使用Electron开发一个完整的Electron桌面端程序。

注意开发环境,个人推荐使用vscode编辑器,网上可以找到很多教程,我这里不再赘述。

同时使用Electron开发是需要你有基本的前端开发经验的,比如html、js、css等,这些比较基础的东西我在文章中不会讲解太多,不会的可以先参考本站的另外三篇文章:

  • HTML
  • CSS
  • JavaScript

二、基本运行结构

上一章提到了,我们在package.js文件中看到了一个叫做main的项,它的值默认为index.js,意思就是将这个文件作为我们软件运行的入口文件。

所以现在我们主要需要自己创建两个文件:

  • index.js:软件运行的入口文件。
  • index.html:这就是我们软件的主页面,用html代码完成。

首先是index.html文件,代码如下:

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello from Electron renderer!</title></head><body><h1>Hello from Electron renderer!</h1></body>
</html>

这只是一个最基本的html代码,当然你也可以随意修改。

有了页面代码后,就是我们的重头戏,也就是index.js中的代码了。

const { app, BrowserWindow } = require('electron')
app.whenReady().then(() => {const win = new BrowserWindow({width: 800,height: 600});win.loadFile('index.html');
})

此刻整个项目如下:

image-20240213154306171

这些代码的含义会在后面解释,现在我们就可以来到控制台当前文件夹下运行命令npm run start了:

image-20240213154432763

于是你就能看到,我们居然就这样写好了一个软件,而且看起来还功能俱全的感觉!

是不是相当的简单?甚至有些难以置信的感觉?

毕竟如果是使用其它框架开发,怎么也难以用如此简略的步骤就完成一个功能俱全的程序啊!

三、代码详解

程序能运行起来了,那就说明我们写的代码确实没有问题,那么现在就可以来讲解一下这些代码的含义。

index.html文件就不用多说了,因为它真的就仅仅只是一个html的网页代码而已。

主要还是看到我们index.js这个文件,因为前面说了,它是整个软件的入口文件,程序启动后,它是第一个被执行的。

它的第一行就是从electron模块中引入我们需要的两个属性:

const { app, BrowserWindow } = require('electron')

electron是什么?不就是前一章我们安装的Electron库嘛!而且你可以在node_modules文件夹中找到它。

require关键字的作用就是引入指定的模块、库中的内容,它只能在node.js环境下使用,在浏览器中是无法使用的。

然后前面的const { app, BrowserWindow },意思就是从这个模块中引出两个不可变的模块、属性、对象、函数等等内容。

不可变也就是const关键字,而app则是electron框架预定义好应用程序实例,简单来说,这个app对象,就代表了我们当前这整个应用程序。

后面我们也可以通过该对象来任意控制整个应用程序,比如退出应用等函数,就在它的身上。

BrowserWindow 则可以用来创建一个窗口,存放我们页面。

比如前面的index.html就是一个页面,但需要用窗口来存放。

有了app这个应用程序实例后,我们就能够在程序不同的情况下执行不同的代码。

而最常见的就是在程序一切准备就绪的时候,开始创建窗口:

app.whenReady().then(() => {//创建窗口
})

它上面的whenReady()函数,就是当程序初始化就绪后,执行指定的函数。

但由于js是单线程程序,不可能一直卡在这里等你应用程序初始化完毕,所以这个函数是异步的。

异步的内容请参考网上其它文章,或者查询本站其它相关的教程。

因此当调用这个函数后,它会直接返回一个管理异步的对象Promise

但我们为了代码简洁,一般不会写这个对象,而是直接调用这个对象身上的函数then

它的意思就是,当这个事件完成之后,就会立马执行then函数中的内容。

这也就有了先后,即确实是等程序初始化后,才会执行then函数中的内容。

then函数可以传递一些回调函数进去,比如这里,就传入了一个箭头函数()=>{}

然后我们就可以在这个箭头中执行创建窗口的代码,等程序就绪后,就会开始执行创建。

这些都是js中的基础内容,但又非常重要,不理解的话你就能以看懂它的运行逻辑,所以这里多说了几句,后面不会再重复赘述。

然后在箭头函数中,我们就可以使用从electron中引入的BrowserWindow类创建一个窗口对象:

const win = new BrowserWindow({width: 800,height: 600
});

这里使用的new关键字创建对象,它的参数就是我们这个窗口的属性,属性非常之多,可以点击BrowserWindow查看。

我这里只用到了其中的宽高属性,即设置这个窗口初始化时的宽与高。

创建成功后,这个窗口就会被保存到前面的常量win上。

有了窗口,就可以加载页面了,直接调用它身上的loadFile函数加载我们写好的页面:

win.loadFile('index.html');

至此,我们的程序就运行起来了!

不过这还非常简略,所以后面的章节我会带着大家一步一步丰富它的内容。

四、打包

仅仅这样写完还不够,毕竟写出来的软件是给别人用的。

但你不能每次都把这么一大堆东西都发送给别人吧?而且还要安装各种开发环境?

这一过程就叫做打包(或者官方也称其为分发,意思也差不多)。

其目的就是将运行这个程序所需要的所有东西放在一起,别人如果想要用,那么就直接发送打包好的程序就行了,也就是大家常见的点击安装,

打包的工具、方式不只一种,官方推荐使用Electron Forge

简单来说就是,在项目根目录下使以下命令:

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

第一行代码是安装这个工具,第二行代码是导入这个工具。

npxnpm弱一点,它仅仅是用来执行命令的,而不能安装包,而npm既可以安装包,也可以执行命令,且这两者都是安装node后自带的命令,两者具体有什么区别可以自行上网搜一搜。

如果嫌npm安装慢,就换成上一章提到的cnpm,将命令换为:

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

然后下面那个npx命令同样需要下载一些开源包,由于这些包很多都在外网,也容易下载失败或者出现错误。

所以你可能还需要更换一下国内的包源。

方法是在当前用户目录下找到一个叫.npmrc的文件,用记事本打开它,写入下面的文本:

ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/

如果没有这个文件,那就自己创建一个,如果有,那就将上面的内容单独放在一行即可:

image-20240213160046922

注意,此时要先关闭以前的控制台后再重新打开控制台运行命令:

npx electron-forge import

重新打开的目的是刷新该终端的配置项,此时一般就可以用了。

当然,如果你能上外网,那么上面这些步骤就都是多余的,直接按官方来即可,没这么多的麻烦。

安装完成后的界面:

image-20240213160548568

然后我们就可以运行下面的命令开始打包了:

npx electron-forge publish

打包完成后,你就能在当前目录的:out\my-electron-app-win32-x64中找到可执行文件了。

image-20240213160953742

如果要将软件发给别人用,你可以在另外一个文件夹out\make\squirrel.windows\x64下找到一个.exe可执行文件。

image-20240213161026504

这就是该软件的安装包,可以直接发送给别人安装使用。

原文以及系列文章后续请参考:第一个Electron程序

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

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

相关文章

BUGKU-WEB GET

题目描述 没有提示&#xff0c;就一个get&#xff0c;启动场景看看&#xff1a; 解题思路 显然是PHP语言解读分析代码吧写出你的payload 相关工具 略 解题步骤 进入场景分析代码 $what$_GET[what]; echo $what; if($whatflag) echo flag{****};前两句&#xff1a;使用get…

上市公司人工智能转型指数及55个工具变量汇总数据集(2024.2月更新)

一、“智能化转型”发文趋势和主题分布 二、数据来源 上市公司年报、官网&#xff0c;中国知网及各期刊官网等三、时间跨度 工具变量&#xff1a;2022-2024年&#xff1b; 上市公司人工智能转型指数&#xff1a;2007-2021年四、数据范围 中国A股上市公司五、数据展示 序号…

jmeter-问题二:JMeter进行文件上传时,常用的几种MIME类型

以下是一些常用的MIME类型及其对应的文件扩展名&#xff1a; 文本类型: text/plain: 通常用于纯文本文件&#xff0c;如 .txt 文件。 text/html: 用于HTML文档&#xff0c;即 .html 文件。 application/msword: Microsoft Word文档&#xff0c;即 .doc 和 .docx 文件。 图像…

TypeScript 入门

课程地址 ts 开发环境搭建 npm i -g typescript查看安装位置&#xff1a; $ npm root -g C:\Users\Daniel\AppData\Roaming\npm\node_modules创建 hello.ts&#xff1a; console.log("hello, ts");编译 ts 文件&#xff0c;得到 js 文件&#xff1a; $ tsc foo.…

《金融人工智能:用python实现ai量化交易》

融合了数学、python、深度学习以及金融知识&#xff0c;是本推荐的好书。请收藏本文&#xff0c;读后再给大学总结。

Toolify.ai 帮助你发现最好的 AI 网站和 AI 工具

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 人工智能作为一门前沿科技领域&#xff0c;吸引着越来越多的人关注和投入。首先&#xff0c;让我们探讨一下为什么对人工智能感兴趣是值得的&#xff1a; 科技进步与应用&#xff1a;近年来&#xff0c…

红队笔记Day3-->隧道上线不出网机器

昨天讲了通过代理的形式&#xff08;端口转发&#xff09;实现了上线不出网的机器&#xff0c;那么今天就来讲一下如何通过隧道上线不出网机器 目录 1.网络拓扑 2.开始做隧道&#xff1f;No&#xff01;&#xff01;&#xff01; 3.icmp隧道 4.HTTP隧道 5.SSH隧道 1.什么…

2024.2.6 模拟实现 RabbitMQ —— 数据库操作

目录 引言 选择数据库 环境配置 设计数据库表 实现流程 封装数据库操作 针对 DataBaseManager 单元测试 引言 硬盘保存分为两个部分 数据库&#xff1a;交换机&#xff08;Exchange&#xff09;、队列&#xff08;Queue&#xff09;、绑定&#xff08;Binding&#xff0…

OWASP TOP10

OWASP TOP10 OWASP网址&#xff1a;http://ww.owasp.org.cn A01&#xff1a;失效的访问控制 例如&#xff1a;越权漏洞 案例1&#xff1a; 正常&#xff1a;每个人登录教务系统&#xff0c;只能查询自己的成绩信息 漏洞&#xff1a;张三登录后可以查看自己的成绩 例如&…

springboot176基于Spring Boot的装饰工程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【51单片机】LCD1602(江科大)

1.LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:162个字符,每个字符为5*7点阵 2.引脚及应用电路 3.内部结构框图 屏幕: 字模库:类似于数码管的数…

探索Gorm - Golang流行的数据库ORM框架

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…