当前位置:首页 > 技术分析 > 正文内容

Electron 开发指南_electron开发的应用程序

ruisui882个月前 (03-01)技术分析18

Electron 是什么

Electron是一款利用Web技术开发跨平台桌面应用的框架,它的前身是Atom Shell。Electron将 Chromium 和 Node.js 的事件循环整合到了一起,同时提供了一些与原生系统交互的 API。

哪些应用是用Electron开发的

Electron官方页面上罗列了上百款利用Electron开发的应用,包括了文本编辑、通讯聊天、音乐娱乐、数据库管理等等方面,其中比较知名的应用有Atom、VSCode和WordPress.com等。

部署开发环境

安装Node.js

Electron开发环境依赖于Node.js,所以需要先安装Node.js。

安装Electron

使用npm安装Electron:

cnpm install electron-prebuilt -g


如果提示权限错误,可以通过管理员权限打开cmd后重新运行上述命令。

安装完毕后执行:

electron -v


检查是否安装成功。

至此我们的开发环境就部署好了,下面就可以进行Electron的开发了。

Hello Word

Electron官方给出了一个简单的示例程序,可以通过Git工具从GitHub上的直接获取。对于没有安装Git的用户,可以直接点击Download ZIP下载文件。


我们把下载下来的zip文件解压出来,打开Windows的命令行,进入该目录,然后运行:

electron ./


如果一切顺利,就可以看到应用窗口了。



到这大家肯定有个疑问:这个程序是怎么跑起来的?由于Electron是Node的运行时,所以它的入口是在package.json中的main进行定义的。package.json是程序信息的描述文件,里面声明了程序的名称、简介、版本等信息。


例子中指定的入口文件是main.js,我们打开该文件看下:


里面定义了一个creatWindow方法。在方法里新建了一个浏览器窗口,并且加载了index.html页面,还打开了开发者工具。


应用在初始化完成后就执行creatWindow方法,所以我们就可以看到上面打开应用后的效果。

开发体验如何

基于 Electron的开发,就好像开发一个网页一样,而且能够无缝地使用Node。或者说:就好像构建一个Node app,并通过HTML和CSS构建界面。另外,你只需为一个浏览器(最新的Chrome)进行设计,而不必花费更多的精力去考虑浏览器兼容性。

原理解析

Electron应用是由两种进程组成:主进程和渲染进程。有些模块会工作在其中一个进程上,而有些会在两个进程之上。主进程更多地充当幕后角色,而渲染进程则是应用的每个窗口。


主进程

主进程,通常是一个命名为 main.js 的文件,该文件是每个Electron应用的入口。它控制了应用的生命周期(从打开到关闭)。它能调用原生元素和创建新的(多个)渲染进程,而且整个Node API是内置其中的。



渲染进程

渲染进程是应用的一个浏览器窗口。与主进程不同,它能存在多个并且是相互独立的。它们也能隐藏的。它通常被命名为index.html。它们就像典型的HTML文件,但在Electron中,它们能获取完整的Node API特性。因此,这也是它与其它浏览器不同的地方。



相互通讯

我们知道,Web页面因为安全限制,不能直接访问原生的GUI资源(比如dialog、电源监控),Electron中也是一样,渲染进程如果想要进行原生的GUI操作,就必须和主进程通讯,请求相应的GUI操作。IPC就为此而生,它提供了进程间的通讯。利用它能在主进程与渲染进程之间传递信息。(虽然渲染进程不能直接操作原生GUI,但它有能力调用Node.js的API,间接就拥有了调用操作系统底层 API 的能力)


Electron应用就像Node应用,它也使用一个package.json文件。该文件能定义哪个文件作为主进程,并因此让Electron知道从何启动你的应用。然后主进程能创建渲染进程,并能使用 IPC让两者间进行消息传递。


如何调试

渲染进程的调试

渲染进程其实就是一个chrome浏览器窗口,其调试与用chrome调试html页面完全一样。通过Ctrl+Shift+I快捷键调出开发者工具就可以进行调试了。

主进程的调试

为了提供一种方法来调试主进程中的脚本,Electron提供了 --debug 以及 --debug-brk 的选项开关。

命令行开关

使用如下的命令行开关来调试Electron的主进程:

--debug=[port]

当这个开关用于Electron时,它将会监听V8引擎中有关port的调试器协议信息。默认的port是5858。

--debug-brk=[port]

就像--debug一样,但是会在第一行暂停脚本运行。

使用VS Code来调试

1. 在VS Code中打开Electron工程,通过快捷键Ctrl+Shift+B设置VS Code的任务运行程序,用于启动electron。


2. 点击“配置任务运行程序”按钮,选择Others选项


3. VS Code会自动生成一个task.json文件


4. 将task.json中的command改为“electron”,args改为“[“—debug-brk=5858”,”.”]”


现在我们就可以直接通过快捷键Ctrl+Shift+B来运行程序了

5. 切换到调试视图


6. 点击配置按钮,选择Node.js环境,VS Code会自动生成launch.json配置文件




7. 打开主进程对应的main.js文件,在需要的地方加上断点:


8. 切换到调试视图,选择附加到进程,并点击启动按钮启动调试


9. 通过快捷键Ctrl+Shift+B启动应用进行调试,下面就会自动停止到第一段代码处


10. 接下来就可以像在浏览器中调试js一样进行调试了。

打包应用

应用开发完了要给别人用就需要将应用打包。Electron是用electron-packager模块来打包的。

1. 运行npm install electron-packager --save-dev命令安装electron-packager模块


electron-packager的打包基本命令是:

electron-packager --platform= --arch= [optional flags...]

参数说明:

? sourcedir:项目所在路径

? appname:打包的项目名字

? platform:你要构建哪个平台的应用(Windows、Mac还是Linux)

? arch:决定构建哪个构架下(x86或x64,all表示两者)

2. 项目根目录下面的package.json里添加打包代码

"packager": "electron-packager ./ HelloWorld --platform=win32 --out=./OutApp "


3. 运行命令npm run-script packager打包应用


可以看到在项目目录中多出了一个OutApp文件夹,里面是打包出来的应用文件夹。


运行里面的HelloWorld.exe文件,我们的应用就打开来了。

加密资源

可以看到,在每个包下的resources文件夹里的app文件夹 就是我们写的程序,这样我们的代码就是暴露在用户电脑上的,这非常的不安全,还好electron 自带了加密功能。


1. 运行npm install asar -g命令全局安装asar

2. 运行npm install asar --save-dev命令在项目中安装asar

3. 安装成功后就可以使用asar命令来讲程序加密打包了。进入我们上面打包出来的应用的resources目录,运行asar pack ./app app.asar命令将app文件夹加密

4. 在resources目录中就生成了app.asar文件

5. 删除多余的app文件夹


喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,一起进步

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2372.html

分享给朋友:

“Electron 开发指南_electron开发的应用程序” 的相关文章

2021最全VUE面试题,奥利给

1. vue-router用过没,哪些常用的钩子函数路由钩子的执行流程,钩子函数种类有:全局守卫、路由守卫、组件守卫。首页可以控制导航跳转, beforeEach , afterEach 等,?般?于页? title 的修改。?些需要登录才能调整??的重定向功能。beforeEach 主要有3个参数...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

前后端分离自动化运维平台开发

运维平台采用前后端分离:前端vue,框架vue-element-admin;后端python,框架django-rest-framework.目前运维平台模块如下:1、 CMDB管理应用管理、环境管理、开发语言管理、产品项目管理、资产管理2、 构建发布持续构建、持续部署、Jar工程依赖构建3、 容器...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

有效地简化导航-Part 1:信息架构

「四步走」——理想的导航系统要做一个可用的导航系统,网页设计师必须按顺序回答以下4个问题:1. 如何组织内容?2. 如何解释导航的选项?3. 哪种导航菜单最适合容纳这些选项?4. 如何设计导航菜单?前两个问题关注构建和便签内容,通常称为信息架构。信息架构师通常用网站地图(site map diagr...

JS数组过滤元素的方法

引言JavaScript 作为前端开发的核心技术之一,在现代 Web 开发中扮演着举足轻重的角色。随着 Web 应用越来越复杂,高效处理数据集合的需求日益凸显。本文旨在介绍 JavaScript 中数组过滤的基础知识及其在实际项目中的应用技巧。技术概述定义数组过滤是 JavaScript 提供的一种...