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

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

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

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开发的应用程序” 的相关文章

软件测试-性能测试专题方法与经验总结

本文 从 性能测试流程,性能测试指标,性能监测工具,性能测试工具,性能测试基线,性能测试策略,性能瓶颈分析方法几个维度,进行知识总结和经验分享;详细见下图总结,欢迎大家补充;性能测试经验与思考1. 性能测试流程1.1. 性格规格评审1.2. 资源排期1.2.1. 人力资源1.2.2. 时间计划· 性...

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...

Vue真是太好了 壹万多字的Vue知识点 超详细!

1??、Vue和其他两大框架的区别Angular 学习成本太高React 代码可读性差Vue 学习成本较低 很容易上手VUE官方: https://cn.vuejs.org/v2/guide/comparison.html?2??、Vue是什么Vue是一套用于构建用户界面的渐进式框架 "前端...

vue打开新窗口并且实现传参,有图有真相

我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页。通过面向百度编程,发现网上的根本达不到这个效果,而且还都是坑,明明实现不了,还若有其事的写出来,于是我在标...

VUE3+JAVA商城源码小程序APP商城

三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。软件架构后端: springboot2.3.12管...

微信开发的五大价值应用

企业形象展示微网站是企业在移动互联网时代完美展示企业及品牌形象的最佳选择,表现内容丰富、实时更新、形式多样化,保证品牌形象的有效传播!微网站带来的轻营销模式,更适应现代网站的发展模式,所以微网站的开发也具有更好的商业营销效果,其面对的受众是7亿多的微信用户,蕴含着无限的商机。将企业微网站植入微信公众...