浏览器还严格限制客户端代码可以访问什么以及它可以做什么。所有这些都为用户提供了更安全、更安全、最终更好的体验。这一切都是非常实用的,也是Web成为这样一个世界的用户平台原因之一,非常棒的,平易近人。
也就是说,所有这些有用且重要的安全限制都严重限制了使用web技术构建应用程序的类型。用户显式地下载和安装Electron应用程序,就像任何其他本机应用程序一样。您可以像任何本机桌面应用程序或服务器端Node进程那样自由地访问文件系统。您还可以自由地向第三方api发出请求,而不需要经过Node服务器,因为您可以访问与任何其他Node进程相同的特权和功能。参见图1.7。
图1.7 Electron应用程序可以使用Node.js第三方api发出请求。
从浏览器上下文访问Node除了授予对文件系统的访问权和启动web服务器的能力之外,Node.js还使用了基于CommonJS模块规范的系统。从最早的版本开始,Node就支持将代码分解为多个模块,并在给定文件中显式地包含所需的模块。
为浏览器打包大量JavaScript代码并不总是那么容易。对于少量代码,您可以将其包含在匹配的一对<script>开始和结束。 对于较大的代码块,可以使用src属性引用外部JavaScript文件。我们欢迎您尽可能多地这样做,但是您必须付出性能代价,因为浏览器会发出一个额外的请求来获取每个外部资产。
欢迎您使用构建工具,如webpack或Browserify(如果您愿意),但在Electron应用程序中通常没有必要使用它,欢迎您使用构建工具,如webpack或Browserify(如果您愿意),但是在电子应用程序中通常没有必要使用它,因为所有Node的全局属性(例如require、module和export)都可以在浏览器内容中使用。您可以在传统上认为是客户端的地方使用Node的模块系统,而不需要向应用程序添加构建过程。
您可以从Electron应用程序的浏览器上下文访问Node的所有api。除了利用Node的模块系统之外,您还可以使用带有本地扩展的已编译模块、访问文件系统,以及做一些通常在浏览器环境中不支持的其他事情。
离线第一
任何曾经在横贯大陆的航班上使用过计算机的人都可以证明,大多数基于浏览器的web应用程序在没有连接到internet的情况下都不太好。甚至使用任何流行的客户端框架的高级web应用程序 与Ember、React或Angular一样,通常需要连接到远程服务器来进行数据交换。
Electron应用程序已经下载到用户的计算机上。通常,它们加载本地存储的HTML文件。在那里,如果连接可用,他们可以请求远程数据和页面。Electron甚至提供了api,允许您检测连接是否可用。使用Electron构建离线应用程序不需要特殊的清单或前沿技术—这是默认状态,除非应用程序显式地从internet请求某些东西。除非特殊情况(例如,您正在构建一个聊天客户机),否则电子应用程序可以像其他应用程序一样离线工作。
Electron如何工作?Electron由主进程和渲染器进程所组成。每个进程在应用程序中扮演不同的角色,Electron包含不同的模块来帮助您构建应用程序。某些模块,例如从系统剪贴板读写的能力,在这两种类型的进程中都可用。其他的,比如访问操作系统接口的能力,仅限于主进程。参见图1.8。
图1.8 Electron多进程框架