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](https://i-blog.csdnimg.cn/blog_migrate/1e74da3230cc4c51f0c81ffe42e6fc9b.jpeg)
如果提示权限错误,可以通过管理员权限打开cmd后重新运行上述命令。
安装完毕后执行:
electron -v
![0d14964568faba366238b50a692646ca.png](https://i-blog.csdnimg.cn/blog_migrate/a65a2da3c95cc668301449069faf9dc2.jpeg)
检查是否安装成功。
至此我们的开发环境就部署好了,下面就可以进行Electron的开发了。
Hello Word
Electron官方给出了一个简单的示例程序,可以通过Git工具从GitHub上的直接获取。对于没有安装Git的用户,可以直接点击Download ZIP下载文件。
![eadb16c458d660e0d2323cff0c5dae81.png](https://i-blog.csdnimg.cn/blog_migrate/c4840470eb98cdb588c29b1c3449f126.jpeg)
我们把下载下来的zip文件解压出来,打开Windows的命令行,进入该目录,然后运行:
electron ./
![c3773ab387dcfa7ef5c5086beb4d8529.png](https://i-blog.csdnimg.cn/blog_migrate/a9f5a3c1f847b556be08c15ab695c8f3.jpeg)
如果一切顺利,就可以看到应用窗口了。
![b6383d61fc13d4ab7028dfa85a49fa23.png](https://i-blog.csdnimg.cn/blog_migrate/75992f53343fbfe5e2d77f4452b5f1ac.jpeg)
到这大家肯定有个疑问:这个程序是怎么跑起来的?由于Electron是Node的运行时,所以它的入口是在package.json中的main进行定义的。package.json是程序信息的描述文件,里面声明了程序的名称、简介、版本等信息。
![35004ef5f86773e2fec36ae3e8eddb8a.png](https://i-blog.csdnimg.cn/blog_migrate/b41c3a5a0eec0ae923b686a1390cba62.jpeg)
例子中指定的入口文件是main.js,我们打开该文件看下:
![0c037cfed3ad7736ccfb749dc133c824.png](https://i-blog.csdnimg.cn/blog_migrate/24d1117dc073d3b23dceb3aab0e03cdb.jpeg)
里面定义了一个creatWindow方法。在方法里新建了一个浏览器窗口,并且加载了index.html页面,还打开了开发者工具。
![29979d90b57afa66831c66dd9eae0fb8.png](https://i-blog.csdnimg.cn/blog_migrate/432a40cd5a8cca51afb9a02706b408b5.jpeg)
应用在初始化完成后就执行creatWindow方法,所以我们就可以看到上面打开应用后的效果。
开发体验如何
基于 Electron的开发,就好像开发一个网页一样,而且能够无缝地使用Node。或者说:就好像构建一个Node app,并通过HTML和CSS构建界面。另外,你只需为一个浏览器(最新的Chrome)进行设计,而不必花费更多的精力去考虑浏览器兼容性。
原理解析
Electron应用是由两种进程组成:主进程和渲染进程。有些模块会工作在其中一个进程上,而有些会在两个进程之上。主进程更多地充当幕后角色,而渲染进程则是应用的每个窗口。
![22533ba1e8b504fff57493983d25076f.png](https://i-blog.csdnimg.cn/blog_migrate/76b77389c06610a021eae83a4e4d4733.jpeg)
主进程
主进程,通常是一个命名为 main.js 的文件,该文件是每个Electron应用的入口。它控制了应用的生命周期(从打开到关闭)。它能调用原生元素和创建新的(多个)渲染进程,而且整个Node API是内置其中的。
![7ace3e671b434f582c2c9ae9b57b2dc3.png](https://i-blog.csdnimg.cn/blog_migrate/4955b01963b5f634a047bff3b46f110a.jpeg)
渲染进程
渲染进程是应用的一个浏览器窗口。与主进程不同,它能存在多个并且是相互独立的。它们也能隐藏的。它通常被命名为index.html。它们就像典型的HTML文件,但在Electron中,它们能获取完整的Node API特性。因此,这也是它与其它浏览器不同的地方。
![94fed31eb927d2ff95cd85abc8ec3c23.png](https://i-blog.csdnimg.cn/blog_migrate/0869bd21bc5596cbfad7cce5cbcc2e66.jpeg)
相互通讯
我们知道,Web页面因为安全限制,不能直接访问原生的GUI资源(比如dialog、电源监控),Electron中也是一样,渲染进程如果想要进行原生的GUI操作,就必须和主进程通讯,请求相应的GUI操作。IPC就为此而生,它提供了进程间的通讯。利用它能在主进程与渲染进程之间传递信息。(虽然渲染进程不能直接操作原生GUI,但它有能力调用Node.js的API,间接就拥有了调用操作系统底层 API 的能力)
![d43de10b31cb9ac2ebc3dd2be6645415.png](https://i-blog.csdnimg.cn/blog_migrate/7843ea6050c72e73cf030bf4c82f7f02.jpeg)
Electron应用就像Node应用,它也使用一个package.json文件。该文件能定义哪个文件作为主进程,并因此让Electron知道从何启动你的应用。然后主进程能创建渲染进程,并能使用 IPC让两者间进行消息传递。
![b49d7c35c2dbafef78700859d4243c88.png](https://i-blog.csdnimg.cn/blog_migrate/25c755d1afb9fe781b8a496b51093093.jpeg)
如何调试
渲染进程的调试
渲染进程其实就是一个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](https://i-blog.csdnimg.cn/blog_migrate/fd27b6111943a4d9ffd44726ef0c0fe9.jpeg)
2. 点击“配置任务运行程序”按钮,选择Others选项
![463cd3bdd630c248556b71d3cce7ee93.png](https://i-blog.csdnimg.cn/blog_migrate/66389501f27c82d3728b70e1cd38df18.jpeg)
3. VS Code会自动生成一个task.json文件
![ea31dfb9a6612f6ef488b4103b7841e6.png](https://i-blog.csdnimg.cn/blog_migrate/460f5739bb5be3b0f92b6452856e1eaf.jpeg)
4. 将task.json中的command改为“electron”,args改为“[“—debug-brk=5858”,”.”]”
![e4e5112ae333045e43b7180eb461fe4a.png](https://i-blog.csdnimg.cn/blog_migrate/4860c33614db7cf1dd6bf227fe977cad.jpeg)
现在我们就可以直接通过快捷键Ctrl+Shift+B来运行程序了
5. 切换到调试视图
![643f743ad05993bfc63ec907aefa8a8d.png](https://i-blog.csdnimg.cn/blog_migrate/75e4c319c580a15fe838ab30355a297e.jpeg)
6. 点击配置按钮,选择Node.js环境,VS Code会自动生成launch.json配置文件
![aefdbc44b555668cef9e64dd89f75e1c.png](https://i-blog.csdnimg.cn/blog_migrate/0ed3f0f4ab7f73693e33810fc3d26ea8.jpeg)
![21e7975cce75d31033e2cfc218377cce.png](https://i-blog.csdnimg.cn/blog_migrate/572bf573c9d7b5386b76ab237e2587b0.jpeg)
7. 打开主进程对应的main.js文件,在需要的地方加上断点:
![be3959418e71d7385e0dcf09b3be7675.png](https://i-blog.csdnimg.cn/blog_migrate/1f5aa49462b338e5bc49eac95a997d88.jpeg)
8. 切换到调试视图,选择附加到进程,并点击启动按钮启动调试
![3ed439027edb71eb747fe4c0a6865a6e.png](https://i-blog.csdnimg.cn/blog_migrate/1f8096b8a8a64ec5f34af6622755d73a.jpeg)
![c126a96890fd83f200eadc5484ea09da.png](https://i-blog.csdnimg.cn/blog_migrate/b952fac30e30242ec118abd64b38e561.jpeg)
9. 通过快捷键Ctrl+Shift+B启动应用进行调试,下面就会自动停止到第一段代码处
![83aba3b54a4070d872cf1c4b7feaca70.png](https://i-blog.csdnimg.cn/blog_migrate/a42271ae0122cc70cef3709e775ac57f.jpeg)
10. 接下来就可以像在浏览器中调试js一样进行调试了。
打包应用
应用开发完了要给别人用就需要将应用打包。Electron是用electron-packager模块来打包的。
1. 运行npm install electron-packager --save-dev命令安装electron-packager模块
![3419953f3838222fec864ac409cbe348.png](https://i-blog.csdnimg.cn/blog_migrate/064d31de03d6cb630c2f1bb8be5a2dfe.jpeg)
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](https://i-blog.csdnimg.cn/blog_migrate/a0f5106d43128d328ca29cb55da5f553.jpeg)
3. 运行命令npm run-script packager打包应用
![3a0805179b27b323b1b7845147394256.png](https://i-blog.csdnimg.cn/blog_migrate/d61d6326f4fb969578cd3eddf7533b81.jpeg)
可以看到在项目目录中多出了一个OutApp文件夹,里面是打包出来的应用文件夹。
![6c23e1b3ba522bb164b25eafe4650634.png](https://i-blog.csdnimg.cn/blog_migrate/1747f5ae88d6dde9887072c18f41fce0.jpeg)
运行里面的HelloWorld.exe文件,我们的应用就打开来了。
加密资源
可以看到,在每个包下的resources文件夹里的app文件夹 就是我们写的程序,这样我们的代码就是暴露在用户电脑上的,这非常的不安全,还好electron 自带了加密功能。
![5877b0d141e19761309162cb816b67a0.png](https://i-blog.csdnimg.cn/blog_migrate/26b20e4419c3925e7d8a2c3af0b104f6.jpeg)
1. 运行npm install asar -g命令全局安装asar
![6a972731a9778bcc1c99d5243b0cca82.png](https://i-blog.csdnimg.cn/blog_migrate/27b738c9302dbeab8fd89289ce406eb6.jpeg)
2. 运行npm install asar --save-dev命令在项目中安装asar
![934c246e708f69b58d2c74da23051ecb.png](https://i-blog.csdnimg.cn/blog_migrate/712481b4fbbaba1f786bde73c5fc4bbd.jpeg)
3. 安装成功后就可以使用asar命令来讲程序加密打包了。进入我们上面打包出来的应用的resources目录,运行asar pack ./app app.asar命令将app文件夹加密
![4ddce018f8929507e3f534565cb17445.png](https://i-blog.csdnimg.cn/blog_migrate/cf9316bf66165b2b19c5e788921dbf93.jpeg)
4. 在resources目录中就生成了app.asar文件
![a8504de74fe75de44effb1ba379057b1.png](https://i-blog.csdnimg.cn/blog_migrate/f9074fa4550871a99053ed1a448e917f.jpeg)
5. 删除多余的app文件夹
喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,一起进步