HOME/Articles/

1.0 Electron 基础概念

Article Outline

1.0 Electron 基础概念

So begins a new age of knowledge


前言

作为初学Electron的同学,官方文档就是最好的文档


定义

  Electron, 可以理解是一个内置浏览器的桌面应用程序,这个桌面应用程序可以让你使用node.js,而不是局限在浏览器运行环境中,从而实现许多浏览器无法实现的功能,如I/O读写等。

优势

  1. 浏览器 + node.js

    优势其一,就是定义中介绍了,可以node.js与Electron提供的api,实现许传统桌面应用才能实现的功能

  2. 跨平台

    一次开发, 多端运行, Electron只需要一份代码,就可以打包出兼容Mac、Windows、Linux平台的引用

  1. 活跃的社区

    Electron有着非常活跃的社区和各种各样的官网工具:Electron社区


应用架构

主进程与多进程架构

在Electron的应用架构中,包含着有且唯一的主进程(Main Porcess)和多个渲染进程(Renderer Process) null

  • 主进程(Main Porcess)

主进程即package.json中main字段指定的脚本,在应用中有且只有唯一一个主进程,在主进程中,使用BrowserWindow实例创建页面,每个页面对应一个渲染进程

TIP

主进程负责维护渲染进程,即渲染进程的创建、销毁

  • 渲染进程(Renderer Porcess)

被主进程使用BrowserWindow实例创建,每个Electron中的web页面运行在它自己的渲染进程中。

IMPORTANT

渲染进程无法调用ElectronGUI相关的API, 如DialogMenu等,因为在 web 页面里操作原生的 GUI 资源是非常危险的, 所以当你希望在web页面调用GUI接口,必须与主进程进行通讯,参考此文

TIP

渲染进程只关心自己渲染的web页面

调用electron的API

Electron官方提供了许多api帮助我们开发桌面应用程序,每个api在文档中都会声明可以在什么进程中调用,如BrowserWindow只能在主进程中使用

// 这样写在主进程会有用,但是在渲染进程中会提示'未定义'
const { BrowserWindow } = require('electron')

const win = new BrowserWindow()

因为进程之间的通信是被允许的, 所以渲染进程可以调用主进程来执行任务。 Electron通过remote模块暴露一些通常只能在主进程中获取到的API。 为了在渲染进程中创建一个BrowserWindow的实例,我们通常使用remote模块为中间件:

//这样写在渲染进程中时行得通的,但是在主进程中是'未定义'
const { remote } = require('electron')
const { BrowserWindow } = remote

const win = new BrowserWindow()

调用nodejs的API

由于electron本质是一个nodejs应用,所有nodejs所有api在主进程和渲染进程都是可以调用的

const fs = require("fs")

const fileBuffer = fs.readFileSync("main.js")

console.log(fileBuffer)

IMPORTANT

原生Node.js模块 (即指,需要编译源码过后才能被使用的模块) 需要在编译后才能和Electron一起使用,绝大多数的Node.js模块都不是原生的, 只有大概400~650个模块是原生的。 当然了,如果你的确需要原生模块,可以在这里查询如何重新为Electron编译原生模块(很简单)。

IMPORTANT

正如您可能已经猜到的那样,如果您尝试加载远程内容, 这会带来重要的安全隐患。 您可以在electron的 安全文档 中找到更多有关加载远程内容的信息和指南。


NEXT TOPIC => 打造你的第一个electron应用:HelloWorld