谨以此书献给热爱技术的你。
机缘巧合,笔者在2016年初次接触到Electron技术,从那时起到现在已有六年左右的时间。当时,公司迫切需要开发出一款能运行在计算机上的桌面客户端产品,但由于我们的开发组人员绝大部分精通的是Web前端技术栈,缺少传统桌面客户端技术栈的开发经验,因此我们不得不去寻找一款基于Web前端开发的桌面客户端技术。后在众多相关技术中,我们选择了Electron。选择Electron的原因,你在阅读本书的过程中可以找到相应的答案。
Electron是一个开源的,能让开发人员使用JavaScript、HTML以及CSS等Web前端技术实现桌面应用的框架。Electron巧妙地将Chromium和Node.js结合在一起,使得开发桌面应用不再是C#、C 等技术栈开发人员的专利,Web前端开发者也能使用他们熟悉的技术开发桌面应用。Chromium和Node.js在Windows、Mac、Linux都有对应的版本,因此它们本身都是跨平台的技术,这使得用Electron框架开发的应用具有较强的跨平台性,也就是大家熟知的“Write once, run everywhere”。
Electron对于Web前端开发人员来说是非常友好的,它将大部分与系统层交互的逻辑封装了起来,免去了开发时对接系统底层的烦琐事务,让开发者在开发桌面应用时有着与开发Web相近的体验。大部分情况下,只要你掌握了前端常说的“三板斧”(JavaScript、HTML、CSS)以及Node.js技术,下载并运行过官方的Demo,稍加探索,就能比较容易地理解Electron框架中的奥秘,很快地掌握这门技术并构建一款桌面应用。
在了解和学习Electron之前,你可能没有意识到,平时接触到的或经常使用的桌面应用中,有很多是使用Electron实现的,例如常用的代码编辑器Visual Studio Code、Atom等,又或者是迅雷。你会惊讶地发现这些应用运行得如此流畅,从而让你感觉不到它们是用Web前端技术实现的。到目前为止,已经有1000多个应用使用Electron技术开发并被世界各地的用户使用。但这不算多,我相信这只是刚刚开始。
随着Electorn的流行,越来越多的开发人员开始学习和使用Electron框架。在笔者这些年与一些开发者接触的过程中发现,一些会让初学者感到困惑的问题,总结为如下几点。
官方文档缺乏场景案例。虽然官方文档详尽地列举了Electron提供的API以及其调用的方式和参数说明,你可以清晰地知道这些API该如何调用。但是在实际项目中使用时你会发现,只了解API如何调用还不足以支撑你实现想要的功能。例如,官方文档虽然提供了在Electron崩溃时如何收集崩溃日志的API,但是在实际项目中,开发者获取崩溃日志并不是终目的,接下来还需要将记录崩溃信息的文件上传服务器,并从崩溃信息中分析出问题的原因。由于官方文档中没有对收集日志和分析的整个场景进行说明,开发人员对此感到困惑,需要去搜索更多的资料来解决问题。
讲解基本原理的中文资料偏少。对于初学者来说,如果不了解Electron的基本组成、Electron是如何将Chromium与Node.js结合起来的,以及主进程与渲染进程的概念等知识,会在应用开发的过程中感到困惑。在缺少这些知识的情况下,开发人员容易分不清一个业务逻辑应该实现在主进程还是渲染进程。如果错误地将原本应该实现在渲染进程的逻辑实现在了主进程,或者反之,往往会造成意想不到的错误或崩溃,对于程序的稳定性和可维护性来说将非常不利。
多窗口应用的案例偏少。无论是网上关于Electron应用开发的教学Demo,还是使用Electron开发的正式产品,大多数为单窗口加载SPA页面的架构。关于需要使用到多窗口并存且窗口之间需要联动的业务场景的介绍和讲解非常少。这两个场景的不同点在于,单窗口加载SPA页面只需要考虑SPA页面本身的可靠性以及可维护性,而多窗口并存且联动的场景不仅要考虑上述问题,还需要考虑如何保证多个窗口能稳定运行及如何实现它们之间的相互配合。例如,在多窗口应用场景中,当其中一个窗口崩溃后,要保证它能自动重新打开并恢复崩溃前的状态,其他窗口需要得到通知做相应的处理。目前这方面的实践文档是偏少的,当开发者遇到需要考虑这种场景的产品时,也会感到困惑。
本书特点
本书是一本简单易学、实践性强的Electron技术图书,具有如下特点。
循序渐进,简单易学。本书的目标读者为对JavaScript、HTML、CSS以及Node.js已经有一定基础,并准备学习或是使用Electron开发桌面应用的Web前端开发人员。因此,本书不会用较长的篇幅对JavaScript、HTML、CSS以及Node.js等相关技术进行讲解,大部分内容将围绕Electron本身展开,从介绍Electron基础概念,再到概念与案例结合,后学习一个基于Electron的开源框架。
理论与案例结合。本书不是单纯地对理论知识进行讲解,也不会深入探讨某个知识点的底层实现。通篇将以通俗易懂的案例辅助理论知识的讲解,使读者能快速地掌握Electron的基本使用方法。
整洁且清晰的代码示例。俗话说,“Take is cheap, show me your code”。我相信一本好的实战类书籍,整洁清晰的代码是主要的。一段好的代码示例能胜过一堆的文字描述。你不用担心看不懂本书中的代码示例,因为第段代码旁都有着编写详尽的注释和描述。如果一遍看不懂,可以再看一遍,同时可以亲手编写代码并运行,直到理解并掌握为止。
在阅读本书的过程中,你能对Electron的基本概念、基本原理有一个较为全面的了解,从而能在开发过程中更合理地实现业务逻辑。与此同时,你能在场景代码示例中学习到高频使用的API是如何被调用的,而不仅仅是从官网文档中了解API的作用。
本书目标读者
类读者:从事Web前端开发,有一定的前端知识基础,出于兴趣开始学习Electron框架,或是项目即将使用Electron进行开发,想快速上手Electron的开发人员。
第二类读者:从事传统桌面客户端开发,想了解Electron框架,对扩展自己技术广度有诉求的开发人员。
第三类读者:已经使用Electron框架开发过项目,熟悉Electron的基本使用,但想学习更多案例实践的开发人员。
本书主要内容
本书共包含10章,各章的主要内容如下。
第1章介绍Electron的由来以及同类技术,让你对Electron有一个大概的了解。
第2章通过讲解一个系统信息展示应用的实现,让你了解用Electron框架开发应用的目录结构。这个过程中你会初步接触到Electron的一些重要概念,如主进程、渲染进程以及窗口等。如果你在阅读本章节时对这些概念感到困惑,不用担心,后面章节会重点讲解它们。
第3章讲解开发人员在使用Electron框架开发应用时必须要掌握的重要概念—主进程、渲染进程以及进程间通信。掌握这些概念之后,将第2章中的系统信息展示应用独立实现一遍,你就可以基本掌握Electron框架的使用了。
第4章讲解窗口相关的知识。在该章节中,你不仅可以学习如何在应用中使用Electron提供的API实现一个简单的窗口,还可以学习一些复杂窗口的实现方式,如组合窗口、透明圆角窗口以及可伸缩窗口等。与此同时,学习完本章,你还可以了解到Windows窗口的运行机制。
第5章讲解应用启动过程中涉及的相关知识,包括启动参数设置、自定义启动协议、设置开机启动以及优化应用启动速度等。
第6章讲解应用如何与本地能力进行交互,包括在应用中操作Windows注册表、调用C或C 语言实现模块以及利用本地存储来存储应用数据。本章内容会大量涉及Node.js、C以及C 相关的知识。如果你先了解相关知识再阅读本章节,将会更容易理解。
第7章讲解应用如何使用硬件设备和系统UI组件。涉及的硬件设备包括常见的键盘、显示器、麦克风以及打印机。系统UI组件包括托盘菜单和系统通知。
第8章讲解开发人员在应用研发的过程中保障应用质量所使用的方法。将涉及如何在开发过程中编写单元测试和集成测试,以及当应用出问题时常见的处理方式。
第9章讲解在应用准备发布时,将源代码打包成安装包并上架到应用商店的方法。应用升级是一个非常重要的功能,本章也将详细讲解。本章的内容对于开发一个正式的、完整的应用来说非常重要,如果你现阶段还未涉及要发布正式应用的场景,可以先跳过本章节的学习。
第10章属于进阶内容,介绍一个基于Electron实现的应用层框架Sugar-Electron。内容上首先会讲解该框架的使用场景、设计原则及其核心模块的使用方式,然后讲解如何运用该框架开发应用。