Electron指南 - 快速入门

快速入门

Electron提供了丰富的本地(操做系统)的API,使你可以使用纯JavaScript来建立桌面应用程序。与其它各类的Node.js运行时不一样的是Electron专一于桌面应用程序而不是Web服务器。javascript

这并不意味着Electron是一个绑定图形用户界面(GUI)的JavaScript库。取而代之的是,Electron使用Web页面做为它的图形界面,因此你也能够将它看做是一个由JavaScript控制的迷你的Chrominum浏览器。html

主进程

在Electron里,运行package.json里的main脚本的进程被称为 主进程 ,运行在主进程里的脚本可以经过建立Web页面来显示GUI。java

渲染进程

由于Electron使用Chrominum来显示Web页面,因此Chrominum的多进程架构也一样被使用。每一个页面在Electron里是运行在本身的进程里,这些进程被称为 渲染进程
在浏览器里,Web页面一般运行在一个沙盒环境里,它不能访问本地的资源。但在Electron里,在Web页面中经过使用Node.js API能够进行底层的操做系统交互。node

主进程与渲染进程的不一样

主进程经过构造 BrowserWindow 实例来建立Web页面。每一个 BrowserWindow 实例在本身的渲染进程里运行Web页面。当一个 BrowserWindow 被销毁后,相应的渲染进程也一样被终止。git

主进程管理全部的Web页面以及相关的渲染进程。每一个渲染进程都是互相隔离的,而且只知道运行在该进程里的Web页面。github

在Web页面里,调用本地GUI是不容许的,由于在Web页面里管理本地GUI资源是很是危险的并且很是容易致使资源泄露。若是你想在Web页面进行GUI操做,该Web页面的渲染进程必须经过和主进程通讯来请求主进程处理这些操做。web

在Electron里,主进程和渲染进程有不少通讯的方法。好比 ipcRandereripcMain 模块是用来发送消息的,remote 模块支持RPC风格的通讯。能够参考FAQ里的如何在不一样的Web页面里共享数据chrome

编写第一个Electron应用

一般,一个Electron应用的结构相似下面:npm

your-app/
├── package.json
├── main.js
└── index.html

package.json 的格式与Node的模块格式是一致的,其中 main 字段指定的脚本就是你应用的启动脚本,该脚本将运行在主进程中。你的 package.json 也许看上去像下面这个例子:json

{
  "name"    : "your-app",
  "version" : "0.1.0",
  "main"    : "main.js"
}

注意 若是在package.json 中的 main 字段没有指定,那么Electron将尝试装载一个名为 index.js 的脚本。

main.js 应当建立窗口而且处理系统事件,一个典型的例子以下:

const electron = require('electron');
// 控制应用生命周期的模块
const {app} = electron;
// 建立本地浏览器窗口的模块
const {BrowserWindow} = electron;

// 指向窗口对象的一个全局引用,若是没有这个引用,那么当该javascript对象被垃圾回收的
// 时候该窗口将会自动关闭
let win;

function createWindow() {
  // 建立一个新的浏览器窗口
  win = new BrowserWindow({width: 800, height: 600});

  // 而且装载应用的index.html页面
  win.loadURL(`file://${__dirname}/index.html`);

  // 打开开发工具页面
  win.webContents.openDevTools();

  // 当窗口关闭时调用的方法
  win.on('closed', () => {
    // 解除窗口对象的引用,一般而言若是应用支持多个窗口的话,你会在一个数组里
    // 存放窗口对象,在窗口关闭的时候应当删除相应的元素。
    win = null;
  });
}

// 当Electron完成初始化而且已经建立了浏览器窗口,则该方法将会被调用。
// 有些API只能在该事件发生后才能被使用。
app.on('ready', createWindow);

// 当全部的窗口被关闭后退出应用
app.on('window-all-closed', () => {
  // 对于OS X系统,应用和相应的菜单栏会一直激活直到用户经过Cmd + Q显式退出
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

app.on('activate', () => {
  // 对于OS X系统,当dock图标被点击后会从新建立一个app窗口,而且不会有其余
  // 窗口打开
  if (win === null) {
    createWindow();
  }
});

// 在这个文件后面你能够直接包含你应用特定的由主进程运行的代码。
// 也能够把这些代码放在另外一个文件中而后在这里导入。

最后 index.html 则是你想要展现在窗口中:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node <script>document.write(process.versions.node)</script>,
    Chrome <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.
  </body>
</html>

运行你的应用

一旦你创建了你的 main.js, index.html, 以及 package.json 文件,你也许会想要尝试在本地运行应用来测试它,确保应用是按照你预期的方式工做。

electron-prebuilt

electron-prebuilt 是一个 npm 的模块,它包含了一个预编译的Electron版本。

若是你已经经过 npm 将该模块全局安装了,那么你只须要在你应用的源代码目录西下运行下面的命令:

electron .

若是你只是在本地安装了该模块,那么运行:

./node_modules/.bin/electron .

手动下载Electron二进制包

若是手动下载了Electron二进制包,你能够经过执行其中包含的二进制文件来直接执行你的应用。

Windows

$ .\electron\electron.exe your-app\

Linux

$ ./electron/electron your-app/

OS X

$ ./Electron.app/Contents/MacOS/Electron your-app/

这里的 Electron.app 是Electron发布包的一部分,你能够在这里下载。

运行发布

在完成应用开发以后,你能够按照应用发布指导建立一个发布,而后执行打包的应用。

尝试例子

经过使用 atom/electron-quick-start 来克隆而且运行教程的代码。

注意 运行该例子须要在你的系统中安装Git以及Node.js(它也包含了npm)。

# 克隆仓库
$ git clone https://github.com/electron/electron-quick-start
# 进入克隆的仓库
$ cd electron-quick-start
# 安装依赖而后运行应用
$ npm install && npm start

翻译自这里

相关文章
相关标签/搜索