electron桌面开发

512 阅读3分钟

1、介绍

官网:www.electronjs.org/zh/docs/lat…

Electron是什么?

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。

基本要求

熟悉该文档之前,需要你有Node.js和web开发经验。 如果您需要了解这两个方面的开发知识,我们推荐您使用以下学习资源:

此外,如果您熟悉Chromium进程模型,您将更好了解 Electron 的工作原理。 您可以通过阅读Chrome comic来获得Chrome架构的简要概述,Chrome架构于2008年同Chrome浏览器的发布而发行。 尽管Chrome发布十多年了,【Chrome comic】漫画中介绍的核心原理仍然有助于理解Electron。

Electron Fiddle运行实例

Electron Fiddle是由Electron开发并由其维护者支持的沙盒程序。 我们强烈建议将其作为一个学习工具来安装,以便在开发过程中对Electron的api进行实验或对特性进行原型化。

Fiddle 已经完美的集成到我们的帮助文档之中。 当你浏览我们tutorial中的例子的时候,你会发现有个"Open In Electron Fiddler" 按钮在代码示例中。 如果你已经安装了Fiddle, “Open In Electron Fiddle" 按钮回打开一个fiddle.electronjs.org链接并加载示例。

2、安装

  1. 初始化package.json: yarn init
  2. 安装electron: yarn add --dev electron
  3. 配置入口文件: "main": "main.js"是主进程 main.js文件:
{
  "name": "electronProject",
  "version": "1.0.0",
  "main": "main.js",
  "license": "ISC",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "start": "electron ."
  },
  "devDependencies": {
    "electron": "^19.0.7"
  }
}
  1. 新建main.js主进程文件
const { app, BrowserWindow } = require('electron')

5、新建index.html文件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
  </body>
</html>

6、启动项目:yarn start

7、API意义:

新建窗口:new BrowerWindow

返回一个实例,渲染页面:mainWindow.loadFile(“index.html文件”)

3、自动刷新:下载热更新

yarn add --save-dev electron-reloader

 const reloader = requrie('electron_reloader')// 热加载
 
 reloader(module)

常见错误:yarn init失败

4、主进程和渲染进程

Elecron运行 package.json 的main 脚本的进程被称为主进程。在主进程中运行的脚本通过创建web页面来展示用户界面。一个Electron应用总是有且只有一个主进程。

由于Electron使用了Chiromium 来展示web页面,所以Chromitum 的多进程架构也被使用到。每个Electron 中的 web页面运行在它叫渲染进程的进程中。

在普通的浏览器中,web页面无法访问操作系统的顶生资源。然而Eloctron的用户在Node.js的API支持下可以在页面中和燥作系统战行一些雇层交互。

ctrl + shif + i 打开渲染进程调试

 mainWindow.webContents.openDevTools()

mainWindow

5、自定义原生菜单

1、定义菜单模板

const {  Menu, MenuItem } = require('electron')

const template = [
  { label: '公众号:' },
  {
    label: '霸道的程序猿',
    click: () => {
      console.log('点击事件OK')
    }
  },
  { role: 'undo' },
  { role: 'redo' },
  { label: '旅游', type: 'checkbox', checked: true },
  { label: '吃', type: 'checkbox', checked: true },
  { label: '逛街', type: 'checkbox', checked: false },
  new MenuItem({
    label: '这是menuItem生成的菜单',
    click: () => {
      console.log('您点击了menuItem的菜单')
    }
  }),
  {
    label: '子菜单测试',
    submenu: [
      { label: '子菜单-1' },
      { label: '子菜单-2' },
      { label: '子菜单-3' }
    ]
  }
]

const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

2、设置自定义顶部菜单+拖拽(drag)