2.第一个Electron程序

news2024/11/30 10:52:35

目录

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

一、前言

原文以及系列文章后续请参考:第一个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.coloradmin.cn/o/1447583.html

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

相关文章

Ubuntu Desktop 删除文件

Ubuntu Desktop 删除文件 1. right mouse click on the file -> Move to Trash2. right mouse click on the file -> DeleteReferences 1. right mouse click on the file -> Move to Trash ​ 2. right mouse click on the file -> Delete ​​​ References …

【机器学习】数据清洗之处理异常点

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

【教程】C++语言基础学习笔记(九)——指针

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

js中事件循环的详解

文章目录 一、是什么二、宏任务与微任务微任务宏任务 三、async与awaitasyncawait 四、流程分析 一、是什么 首先&#xff0c;JavaScript是一门单线程的语言&#xff0c;意味着同一时间内只能做一件事&#xff0c;但是这并不意味着单线程就是阻塞&#xff0c;而实现单线程非阻…

爬虫——ajax和selenuim总结

为什么要写这个博客呢&#xff0c;这个代码前面其实都有&#xff0c;就是结束了。明天搞个qq登录&#xff0c;这个就结束了。 当然也会更新小说爬取&#xff0c;和百度翻译&#xff0c;百度小姐姐的爬取&#xff0c;的对比爬取。总结嘛&#xff01;&#xff01;&#xff01;加…

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag

深入浅出解析指针:从概念到实践

在编程的世界中&#xff0c;指针是一个非常重要且强大的工具。无论你是初学者还是经验丰富的开发者&#xff0c;理解并熟练使用指针都将极大地提升你的编程能力。今天&#xff0c;我们就来一起探讨指针的奥秘。 一、指针的基本概念 首先&#xff0c;我们需要明白&#xff0c;…

C++进阶(十六)特殊类设计

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、请设计一个类&#xff0c;不能被拷贝二、请设计一个类&#xff0c;只能在堆上创建对象三、…

从零开始:Linux下的Miniconda安装教程

&#x1f680;从零开始&#xff1a;Linux下的Miniconda安装教程&#x1f680; &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;二、Miniconda简介&#xff1a;开启您的数据科学之旅的得力助手&#xff01; &#x1f333;&#x1f333;三、Lin…

【前沿技术杂谈:迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新]

【前沿技术杂谈&#xff1a;迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新&#xff3d; 定义、一般原则和禁止做法人工智能系统开发者基于风险的义务固定和通用人工智能开发人员&#xff08;第 3/28 条&#xff09;基础模型的提供者&#xff08;第 28b…

C++入门篇——类与对象重点解析(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public: Date(int year, int month, int day) {_year year;_month month;_day day; } private:int _year;int _m…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

全国计算机等级考试二级,MySQL数据库考试大纲(2023年版)

基本要求&#xff1a; 1.掌握数据库的基本概念和方法。 2.熟练掌握MySQL的安装与配置。 3.熟练掌握MySQL平台下使用&#xff33;&#xff31;&#xff2c;语言实现数据库的交互操作。 4.熟练掌握 MySQL的数据库编程。 5.熟悉 PHP 应用开发语言&#xff0c;初步具备利用该语言进…

下一代块存储重新定义任务关键型存储架构

HPE 宣布全面推出基于 HPE Alletra Storage MP 构建的 HPE GreenLake for Block Storage 第 3 版&#xff0c;提供业界首款分解式横向扩展块存储&#xff0c;并提供 100% 数据可用性保证。这种独特的块存储产品由共享一切存储架构提供支持&#xff0c;并通过 HPE GreenLake 云平…

OCP的operator——(1)概述

文章目录 概述了解Operator什么是Operator为何使用OperatorOperator FrameworkOperator成熟度模型 Operator Framework 打包格式Bundle格式Manifest注解依赖关于opm CLI 基于文件的目录RukPak Operator Framework常用术语表常见Operator Framework术语BundleBundle imageCatalo…

腾讯云4核8G服务器能支持多少人访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

Java+SpringBoot+Vue:高校科研管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces

ubuntu22.04laptop OpenCV Get Started: 007_color_spaces 1. 源由2. 颜色空间2.1 RGB颜色空间2.2 LAB颜色空间2.3 YCrCb颜色空间2.4 HSV颜色空间 3 代码工程结构3.1 C应用Demo3.2 Python应用Demo 4. 重点分析4.1 interactive_color_detect4.2 interactive_color_segment4.3 da…