初探 Electron 桌面应用 - 理论篇

1,038 阅读3分钟

                                            关注“前端学苑” ,坚持每天进步一点点

                                                         「Electron 跨平台桌面浏览器」


桌面应用程序就是GUI程序,是采用图形方式显示的计算机操作用户界面。

本文主要包括:

1、桌面应用开发选型

2、前端桌面应用:electron和nw.js区别对比

3、Electron 简介、Main(主)进程和Renderer(渲染)进程

4、electron-vue 简要介绍

5、electron 打包方式

6、踩坑总结


正文从这里开始~~~

桌面应用开发技术选型

前端桌面应用:electron和nw.js区别对比

一、原理实现对比:

Electron是由Github开发,electron的web技术:node + chromium。用HTML,css和javascript来构建跨平台桌面应用程序的一个开源库。

NW.js是Intel开发,nw.js的web技术:node + webkit。 可以嵌套我们的web页面,让我们不需要兼容不同版本的浏览器,也可以通过内置的api调用一些底层方法。

二、技术的对比

1、Electron比nwjs 社区更活跃,众多贡献者组成的活跃社区共同维护的开源项目。

2、Electron 官网的文档更全面些。

三、资料说明:

Electron官网:https://www.electronjs.org/

Electron的github地址:https://github.com/electron/electron

electron不同版本:https://npm.taobao.org/mirrors/electron/

nwjs官网:https://nwjs.io/

nwjs的github地址:https://github.com/nwjs/nw.js


最终结果,选择用electron做桌面应用开发

1、因为electron桌面应用社区活跃度高,官网文档比较全面。

2、 因为现在vue框架比较火,针对桌面应用有electron-vue框架,更加方便。


Electron 简介

1、理解Electron桌面应用

图解:electron由Node.js+Chromium+Native APIs构成。你可以理解成,它是一个得到了Node.js和基于不同平台的Native APIs加强的Chromium浏览器,可以用来开发跨平台的桌面级应用。

2、Main(主)进程和Renderer(渲染)进程

1)主进程 - main process

electron项目启动的时候运行main.js的进程就是主进程

一个项目有且只有一个主进程

创建窗口等所有系统事件都要在主进程中进行

简单的说就是我们的electron项目的主进程只有一个, 主进程的执行代码需要写到main.js中, 所有跟系统事件相关的代码统统都要写在这里

2)渲染进程 - Renderer Process

我们每创建一个web页面都会创建一个渲染进程

每个web页面运行在它自己的渲染进程中

每个渲染进程是独立的, 它只关心它所运行的页面

简单理解就是一个web页面一个渲染进程

3)Main进程和Renderer进程通过ipcMain和ipcRenderer来进行通信。

通过事件监听和事件派发来实现两个进程通信,从而实现Main或者Renderer进程里不能实现的某些功能。

3、Electron定义包括:

1、web技术:Electron 基于node.js 和 Chromium

2、开源:社区也更活跃,众多贡献者组成的活跃社区共同维护的开源项目。

3、跨平台:兼容Mac,Windows 和 Linux。

4、摆脱了不同浏览器之间的差异和版本的限制

目前,Electron已经创建了包括VScode和Atom在内的大量应用。

4、快速启动Electron项目

# 克隆示例项目的仓库

$ git clone https://github.com/electron/electron-quick-start

# 进入这个仓库

$ cd electron-quick-start

# 安装依赖并运行

$ npm install && npm start


electron-vue 简要介绍

vue只是在renderer进程里使用的框架,不涉及到main进程。

不过想要做到把vue和electron结合起来并不是一件特别容易的事。为了方便开发,我使用的是electron-vue,这个是开发者SimulatedGREG参考vue-cli的webpack模板骨架搭建的electron和vue结合的开发脚手架。


electron-vue桌面应用开发资料:

electron-vue开发文档:https://simulatedgreg.gitbooks.io/electron-vue/cn/

electron-vue的github地址:https://github.com/SimulatedGREG/electron-vue

electron-vue脚手架:https://github.com/SimulatedGREG


electron-vue感觉好的地方如下:

1、只有一个package.json。而大部分其他的项目结构依然在使用两个package.json来应对main进程和renderer进程的依赖库。

2、内建完整的vue全家桶,省去再次配置vue-router和vuex的一些初期操作。

3、内建完整的webpack开发、生产等配置,开发环境舒适。

4、内建完整的开发、构建等npm scripts,使用非常方便。

5、内建完整的Travis-ci、Appveyor配置脚本,只需少数修改就能做到利用CI自动构建的应用发布。

6、完善的文档,清晰的项目结构。

主要关注的两个文件夹:src/main和src/renderer分别对应的是main进程和renderer进程。


electron 打包方式

1、electron-packager:https://www.npmjs.com/package/electron-packager

2、electron-builder:https://github.com/electron-userland/electron-builder

简单的说,electron-builder 有比 electron-packager 更丰富的功能,支持更多的平台,同时也支持了自动更新。除了这几点外,electron-builder 打出的包更为轻量,并且可以打包出不暴露源码的 setup 安装程序。另外使用下来感觉比 electron-packager 的坑要少一点。


electron-builder的自动更新

更新机制

踩坑总结

electron 安装卡死在node install.js

使用命令sudo npm install electron -g安装electron中总是卡死node instatll.js这一步,之后就是报错: 网络超时。

npm install 报错 Error: Electron failed to install correctly, please delete node_modules/electron and try installing again


查阅资料后,发现大体解决方法是:

1、npm 安装 node-sass 网速慢可以运行

npm config set registry https://registry.npm.taobao.org

配置国内淘宝镜像

2、编辑 ~/.npmrc

$ sudo vi ~/.npmrc

添加如下配置

registry=https://registry.npm.taobao.org

sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs electron_mirror=http://npm.taobao.org/mirrors/electron/


网上找的项目地址:

需要深入研究 (重要)

https://github.com/Molunerfinn/PicGo

https://github.com/poetries/yuqing-monitor-electron


对于electron开发有两种说法:

1、很简单,不过就是web开发换了个壳

2、很难,需要了解很多原生的概念,不知道要怎么入手


electron的开发其实包括了两个部分,一个是main进程的相关开发,一个是renderer进程的相关开发。对于renderer进程的开发对于大多数前端开发人员来说不难。main进程的相关开发,如果你想要把electron的main进程的所以特性都学一遍、都用一遍,确实是需要不少时间的。