作者|李晓明
编辑| 杜明
认识 Electron
Electron 是GitHub 开发的开源库,使用HTML、CSS 和JavaScript 构建跨平台桌面应用程序。 Electron 的工作原理是将Chromium 和Node.js 合并到同一运行时环境中,并将它们打包为适用于Mac、Windows 和Linux 系统的应用程序。 Electron 于2013 年开发,作为构建Atom 的框架,Atom 是GitHub 上的可编程文本编辑器。
这并不意味着Electron 是与GUI 库捆绑在一起的JavaScript。相反,Electron 使用网页作为其GUI,因此您可以将其视为由JavaScript 控制的Chromium 浏览器功能的简化版本。
Electron 版本更新非常频繁,次要版本通常每周发布一次,主要版本每季度发布一次。除了稳定版之外,还有Beta 版和Nightly 版(最新功能的试用版),并且当Chromium 更新时,Electron 也会相应更新。
为什么选择电子?
如今的桌面应用软件根本上需要运行在多个平台上,而MFC、Duilib等技术无法满足这一需求。如今的跨平台桌面应用软件大多使用QT和Electron来开发。
QT跨平台开发
Qt 是一个跨平台的C++ 图形用户界面应用程序开发框架。它既可用于开发GUI程序,也可用于开发非GUI程序,例如控制台工具和服务器。作为一个使用C++语言开发的框架,它的优点和缺点都非常明显。
优势:
运行效率高,架构稳健,性能强劲。坏处:
开发周期长,因此开发人员必须具备C++编程能力。尽管QT是付费软件,但您必须使用它来开发商业(闭源)程序。它遵守LGPL协议,LGPL库的源代码开源。电子桌面软件开发
Electron 最初用于开发Atom,这是GitHub 上的一个可编程文本编辑器。它是一个在Node.js 和Chromium 的帮助下使用HTML/CSS/JavaScript 语言创建桌面应用程序的框架。 NW.js 也类似,但NW.js 社区的发展基本停滞,更新缓慢。
优势:
使用JavaScript语言作为开发语言可以让前端开发人员轻松开发桌面应用程序,使调试变得更加容易,并提供浏览器开发者工具来调试富Web前端。 UI资源可以让你快速创建华丽的界面并进行迭代开发。 Electron是浏览器底层最复杂的部分,应该只负责开发上层界面和业务逻辑。 Electron还提供热更新功能。只需加载更新模块,它就会自动检查更新并在后台下载崩溃日志报告。轻松收集崩溃日志并查找开源C++ 插件扩展代码。 Electron 是GitHub 上的一个开源项目。如果开发者有疑问,可以直接在GitHub 社区中提出问题:https://github.com/Electron/Electron。高级开发人员可以修改Electron的底层代码并定制自己的Elcetron。坏处:
包文件太大。毕竟Electron是浏览器,最小的应用安装包也就几十兆,而且代码无法加密。与Web开发类似,用户可以在开发者工具中查看应用程序的客户端代码,需要代码加密的商业软件可以用于在服务器上实现的关键功能、桌面应用程序所需的功能,或者可以选择有时消耗资源的功能。浏览器的一个常见问题是Electron 应用程序也是多进程系统。启动一些Electron 应用程序很好,但启动太多会导致机器冻结。不支持XP 系统,Node.js 也不支持XP。系统。综上所述,如果你想快速开发很酷的桌面应用程序,而没有太多系统限制,Electron 是一个不错的选择。如果您是前端开发人员并想要创建桌面应用程序,我们推荐Electron。
创建一个简单的应用:环境安装
Electron 应用程序本质上是Node.js 应用程序。要安装Node.js,只需访问官方网站(http://Node.js.cn/download/)。安装完成后,在命令行窗口中分别输入“node -v”和“npm -v”查看Node和NPM版本。
应用程序初始化
与Node.js 模块类似,应用程序的入口点是package.json 文件。可以通过在文件夹中使用npm init 命令并按照提示输入各种信息来生成此文件。 基本的Electron 应用程序通常具有以下目录结构:
myapp/favorable进程是完成窗口创建和加载URL或HTML文件的主进程。 GitHub 上提供了一个简单的Electron 应用程序https://github.com/electron/electron-quick-start.git,用于学习目的。
使用C++插件扩展功能
对于复杂的业务逻辑,可以在C++插件节点中开发。 C++插件主要完成一些复杂的逻辑功能供Electron调用。 Electron 的C++ 生成的Node 插件参考函数来自Node.js,可以使用require() 函数加载到您的项目中,并像常规模块一样使用。 JavaScript 和C++ 库之间的接口使用V8 引擎,如下图所示。
插件开发环境
C++ 插件开发需要安装node-gyp 和Python 2.76。 Windows 上的开发也需要Visual Studio。
每个插件都有一个项目文件binging.gyp,它由源文件、包含路径和链接库、目标文件以及要使用的编译器组成。格式为:
{ 'targets': [ { 'target_name': 'addon', 'sources': [ 'addon.cc' ] } ]} C++与JavaScript通过V8交互执行的整体流程如下图所示。
C++ 可以使用Napi 接口。使用宏NODEAPIMODULE(hello, Init) 加载模块。一个例子是:
#include napi.hNapi:String方法(const Napi:CallbackInfo info) { Napi:Env=info.Env(); return Napi:String:New(env, 'world');}Napi:Object Init(Napi) :Env env,Napi:对象导出){exports.Set(Napi:String:New( env) , 'hello'), Napi:Function:New(env, Method)); return Exports;}NODE_API_MODULE(hello, Init) 编译C++ 插件的命令是:
node-gyp configure build 生成的C++ 插件是节点文件,例如hello.node。在JavaScript中调用C++插件,直接使用require函数。 hello.js代码如下:
var addon=require('hello'); console.log(addon.hello()); JavaScript 可以调用C++ 接口,运行命令node hello.js,并打印'world'。
要在C++中调用JavaScript传递的回调函数,必须使用libuv库。 libuv 为平台上的所有异步操作实现了Node.js 事件循环、工作线程和C 库。 具体参考示例代码https://github.com/nodejs/node-addon-examples。
Electron打包
您可以使用electro-builder 和Electron-packager 来打包Electron 应用程序。打包命令是npm run builder。您可以使用参数来配置生成的安装包的操作系统。
作者:李晓明。目前在环信担任高级软件开发工程师,使用C++和Node.js作为开发语言。他对行业尖端技术的不懈追求。
声明:本文为作者原创投稿,版权归CSDN所有,未经许可严禁转载。
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。