electron 打包_Electron 开发指南

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

7e863daed0a34564bd7c77c1eac1f92a.png

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

安装完毕后执行:

electron -v

0d14964568faba366238b50a692646ca.png

检查是否安装成功。

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

Hello Word

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

eadb16c458d660e0d2323cff0c5dae81.png

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

electron ./

c3773ab387dcfa7ef5c5086beb4d8529.png

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

b6383d61fc13d4ab7028dfa85a49fa23.png

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

35004ef5f86773e2fec36ae3e8eddb8a.png

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

0c037cfed3ad7736ccfb749dc133c824.png

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

29979d90b57afa66831c66dd9eae0fb8.png

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

开发体验如何

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

原理解析

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

22533ba1e8b504fff57493983d25076f.png

主进程

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

7ace3e671b434f582c2c9ae9b57b2dc3.png

渲染进程

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

94fed31eb927d2ff95cd85abc8ec3c23.png

相互通讯

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

d43de10b31cb9ac2ebc3dd2be6645415.png

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

b49d7c35c2dbafef78700859d4243c88.png

如何调试

渲染进程的调试

渲染进程其实就是一个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。

48d22ac11df7f06e4542025fe0b2971d.png

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

463cd3bdd630c248556b71d3cce7ee93.png

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

ea31dfb9a6612f6ef488b4103b7841e6.png

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

e4e5112ae333045e43b7180eb461fe4a.png

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

5. 切换到调试视图

643f743ad05993bfc63ec907aefa8a8d.png

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

aefdbc44b555668cef9e64dd89f75e1c.png
21e7975cce75d31033e2cfc218377cce.png

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

be3959418e71d7385e0dcf09b3be7675.png

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

3ed439027edb71eb747fe4c0a6865a6e.png
c126a96890fd83f200eadc5484ea09da.png

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

83aba3b54a4070d872cf1c4b7feaca70.png

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

打包应用

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

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

3419953f3838222fec864ac409cbe348.png

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 "

c82f702fec2a84784d3615c9397183a1.png

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

3a0805179b27b323b1b7845147394256.png

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

6c23e1b3ba522bb164b25eafe4650634.png

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

加密资源

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

5877b0d141e19761309162cb816b67a0.png

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

6a972731a9778bcc1c99d5243b0cca82.png

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

934c246e708f69b58d2c74da23051ecb.png

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

4ddce018f8929507e3f534565cb17445.png

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

a8504de74fe75de44effb1ba379057b1.png

5. 删除多余的app文件夹

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值