前端爱好者的知识盛宴
嗨
这里是IMWEB
一个想为更多的前端人
享知识
助发展
觅福利
有情怀有情调的公众号
欢迎关注转发
让更多的前端技友一起学习发展~
导语
对于大多数前端包括多终端的开发,Electron 可以开发跨平台桌面客户端,在需要开发这类产品时,是个不错的选择。
以下是我以第一视角基于 Electron 开发客户端产品的体验。
正文
Electron
是什么让 Electron 如此迷人?
可能主要是因为,猿类里的亚种——前端开发——又有了新的出路了吧,还没找工作的前端开发,又有了新的岗位可以去选择,已经在岗的前端也有了新一年的 KPI/OKR,刚起步的创业公司可以只拉一个前端就能开发跨平台的多个桌面客户端... ...(开个玩笑)。
1.用 Web 前端技术开发跨平台的桌面客户端
这是 Electron 最迷人的地方,究其根本是因为它是建立在「Chromium」和「Node」之上的,一个负责界面,一个负责背后的逻辑,典型的「你负责貌美如花,我负责赚钱养家」,为什么 Electron 能够开发跨平台的桌面应用也就可以理解了。
而对于前端开发来说,「不要和老夫说什么 C ,Java,老夫行走江湖就一把 JS,遇到需求就是干」。前端开发可以用自己熟悉的方式去写应用界面,逻辑部分也还是 JS,如果你精通 Node 后端,那后端也可以插一脚,「鸟枪换大炮」,你开发客户端的能力有一种「忽如一夜春风来」的感觉。
但是,不同系统间还是会有很大的不同,「同一套代码,编译出跨平台的多个客户端」,话是这么说,但你得因为系统的不同做一些额外的处理,以使得打包出的不同系统下的应用都可以正常工作,这可能是一些「if - else」的成本,但相比于那 80% 都能完全复用的代码,这些成本已经很小了。
综上所述,一个 Web 前端开发者可以花很少的成本去上手 Electron,而相比于以前开发多平台客户端的成本,利用 ELectron 开发多平台客户端的成本是极低的。
2. 可以从 Node 的生态获得极大的助力
因为 Electron 是基于 Node 的,意味着,Node 这个大生态下的模块,Electron 也都可以用,这减少了很多造轮子的时间,你要写一些逻辑将首先思考有没有成熟的模块可以引入,而不是自己吭哧吭哧闭门造车,自己造时间精力会大量得被消耗,上路还可能翻车。
Electron 从 Node 获益有 2 个方面。
一个方面是如现代的 web 项目一般,开发构建流程可以引入很多成熟的包去打造出适合自己项目的开发工作流,另一个方面就是其应用本身也可以依赖需要的包去完成自己的功能,之后的文章我们会展开详细说。
3. 这个东西网站也可以为什么需要客户端?
既然 Electron 是用 Web 技术写客户端,那么看上去 Electron 要做的事,可以搬到网站上,为什么还要搬到客户端,这里有 3 个角度的回答:
•用户角度: 客户端是一款独立的软件,其综合体验 一般都是比网站高的,尤其是涉及到「工具」范畴的 应用,此外,特定的用户群体也会有类似的使用习惯
•发行方角度: 客户端是另一种产品形式,是一种产 品的分发方式和入口,客户端可以实现很多本地应 用独有的需求去触达用户,也能提供更加可靠的服务
•开发角度: 终于... 不用考虑浏览器兼容了,
Chromium 也足够开发使用一些先进的 CSS 或 JS 特性,我们现在还没计划引入 webpack 和 babel,
因为现在好像够用,克制才是爱,除了写起来爽,对
于开发来说,终于跳出了浏览器的沙盒,你可以自己
去控制 Electron 中的「浏览器」,莫名的开心
这些综合起来回答这个小节的问题就是,用 Electron 开发客户端,用户体验好,开发麻烦小,功能更强大,老板脱发少。
4. Electron 和 NW.js 之间,为何选择前者?
我没怎么用过 NW.js,但当时在没有时间深入体验的实际情况下,我选择生态好的。
Electron 相关的社区生态很好,之后的开发过程也证明了这一点,遇到的问题基本都能通过 Stackoverflow 找到,如果没有找到,新开一个问题或者去 Github 提 Issue 都可以得到较快的解决,除非是一些已知的问题或一些看文档可以解决的问题,这类问题可能会被忽略过去。
所以,生态更好一些,我选择了 Electron。
Electron 入门可以有哪几阶段?
这一节从笔者目前有限的能力给出学习和使用 Electron 可能需要经历的几个阶段,里面提及的基础的内容可以去搜一下,有很多文章都解释了,比如什么是主进程,什么是渲染进程,而一些重要的实践是之后我会慢慢写的,比如开发打包构建发行工作流、自动更新和升级的实现等。
该怎么去阅读和学习 Electron 的文档
读文档,这回事其实是见仁见智的,如果你看文档有自己的三板斧,可以不用管这一节,不然还是建议看一下一些读和查 Electron 文档的建议,曾经我也「行尸走肉」般地看过 Electron 文档,然后发现这样效率极低,所以都是教训啊。
1.看文档要结合一些别人写的博文或代码去看
文档里你不理解的,可能很多开发者已经在自己的博客里展开解释了,所以你如果遇到看文档不理解的,可以搜一些文章,结合着看,这样你才会理解,尤其对于必须理解的基本概念,这非常重要。
甚至,你可能还要结合一些代码去看。
2. 第一遍理解基本概念和Electron 文档的组织方式
第一遍浏览,快的一个下午,慢的 2 天,检查自己的成果就是搞定以下 3 个难题,你都能清楚地表达就可以了:
1.能向不了解 Electron 前端开发解释清楚 Electron 这个技术框架的特性和优势
2.能清楚地解释什么是「主进程」,什么是「渲染进程」,各自负责什么,怎么通信的
3.大脑中可以清晰地浮现出 Electron 文档的组织方式(尤其是 API 文档部分,是分主 / 渲染进程的、模块化的 API 组织方式)
3. 第二遍看看各个 API 模块大致负责什么
在第一遍的基础上,第二遍看 API 文档,脑中基本就有一定的框架了(别小看第一遍的浏览,这会大大提升你第二遍看的效率,也会提高以后你查文档的效率),这个时候看文档的目标就是让每个模块在脑中有一个印象。
这个印象包括,这个模块是在哪类进程中可用的、这个模块负责什么功能,有个印象就好。
因为每个应用的不同,可能对于模块的重要程度排序也会不同,我仅给出我的建议,你可能需要好好看的一些模块,「好好看」的意思是,这些模块可能是很重要的,你要仔细地看:
只能在主进程使用的:
•app:控制你整个 Electron 应用的生命周期
•BrowserWindow:创建和控制应用的窗口
i •pcMain:用于主进程中,和渲染进程通信的
•webContents:渲染和控制你窗口中的 web 内容的(因为 Electron 中,你是用 web 写的界面)
可以在渲染进程使用的:
•ipcRenderer:用于渲染进程中,和主进程通信的
•remote:可以方便你在渲染进程中直接调用主进程的 方法
•<webview> Tag:可以载入外界的网页
以上模块是我觉得是需要仔细学习的第一梯队模块,当然也说了,每个应用不尽相同,所以总体思路还是知道什么对自己重要,就重点看什么,至于其余的,要用到的时候去查就行。
4. 查文档
只要你已经对 Electron 有了大致的认识,你就会查文档了,不会发生你要在渲染进程中使用的模块,但却直奔主进程中可用的模块那查半天。
有一个 Tip 是,如果你是明确可以定位的,那么你根据你的需求去查对应模块,如果你只有几个关键字,那么 Electron 提供把所有文档在一个页面内展示,这样你就可以用「搜索」了。
该如何去挑选一些 Electron 的 Demo 源码来学习和实践
每过一段时间,总能看到一些文章「Electron xxx 开发 what what what」,所以我们可以借鉴和学习的 Demo 是很多的,但是要去挑适合自己的并且友好的 Demo 来看,而看 Demo 代码也需要一定的方式。
1. 如何选择第二个你要学习的 Electron Demo
怎么没有第一个?「Hello World」:你把我置于何地。
挑一个复杂度不要太高的(package.json 简单的一般不复杂)。这一点好理解,不解释。
不要选择一个代码写得很随意的,可能会带坏你。没注释,代码风格清奇,这样的还是算了吧。
不要去跟着写了很复杂的界面,但对 Electron 本身的使用没几行的 Demo,毕竟你不是来学 CSS 的。我真遇到过所谓用 Electron XXX 开发的项目,写了一个花哨的界面,对 Electron 的使用依旧停在「Hello World」阶段。
2. 如果找到了这样的 Electron 项目,How to play
看懂主要的代码逻辑,看不懂的查文档。
自己去给它扩展一个功能,这里会遇到一些很有趣的事,比如你觉得应该简单的,结果你花了很久都没搞定,正常的,所以建议扩展一个和 Demo 中已有功能类似的功能,那样你可以直接参考了。
3. 等有了自己要开发的应用后,再去看别人的 Demo 是看什么?
直到目前,我还是会经常看一些其他的 Electron Demo 或者已可以称为产品的应用,这个时候我不可再事无巨细地去看整个应用的代码,而是明确知道我要去看什么。
举个栗子,在开发实际应用一段时间后,我觉得我们的 Electron 应用,从开发到打包,再到构建安装包,最后到发行,整个开发工作流效率低下,很不流畅,这个时候我就去看很多的项目,借鉴很多的优秀实践,感谢他们。在那个时候,我就会只看他们是怎么组织整个工程的,是怎么划分开发的各个阶段的,又是如何让整个流程流畅地自动化的。
到后来,需要实现「自动更新」功能的时候,我又去看一些实现了自动更新的应用和 Demo,看他们是怎么实现的,最终结合我们自己的需求实现了「分强弱的自动更新」功能。
所以在有了自己要开发的产品后,看 Electron 应用的代码,就是带着诉求去看的,这一步对优化自己的产品很重要。
任重道远,欢迎交流。
关注小编
留言夸夸小编
转发文章给小编加鸡腿
跟更多的人一起学习
让我们又爱又恨的前端