Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Electron #8

Open
TopGrd opened this issue Jun 28, 2019 · 0 comments
Open

Electron #8

TopGrd opened this issue Jun 28, 2019 · 0 comments

Comments

@TopGrd
Copy link
Owner

TopGrd commented Jun 28, 2019

Api

demopark/electron-api-demos-Zh_CN

ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/ npm i electron

架构

主进程和渲染器进程

运行package.jsonmain脚本的进程被称为 主进程,一个 Electron 应用总是有且只有一个主进程
使用了Chromium 来展示 web 页面,Chromium 的多进程架构也被使用到。每个 Electron 中的 web 页面运行在它自己的渲染进程中。

image
image
image
image

rebuild native-module

使用的包包含 C++ 的原生实现。所以在 pack 前需先用 electron-rebuild 做 rebuild。

rebuild 如果很慢,可能是要翻墙,可尝试 cnpmjs.org 提供的镜像,electron-rebuild -d=https://gh-contractor-zcbenz.cnpmjs.org/atom-shell/dist/。
GitHub - electron/electron-rebuild: Package to rebuild native Node.js modules against the currently installed Electron version

在渲染进程中使用主进程模块

使用remote api, 在主进程中导出模块, remote | Electron

// main services
const pty = require('node-pty')
module.exports = { pty }
// main index.js
const services = require('./services')
global.services = services
// renderer services
import { remote } from ‘electron’
const services = remote.getGlobal(‘services’)
export default services
// renderer app.js
import services from './services'

另一种方式是Ipc通信

electron 中模拟终端

https://github.com/xtermjs/xterm.jsnode-pty/renderer.js at master

Microsoft/node-pty · GitHub

监听进程崩溃

mainWindow.webContents.on('crashed', () => {
    const options = {
      type: 'info',
      title: '进程崩溃',
      message: '这个进程崩溃了',
      buttons: ['重载', '退出'],
    }

    dialog.showMessageBox(options, (index) => {
      if (index === 0) mainWindow.reload()
      else mainWindow.close()
    })
})

renderer进程与main进程通信

使用ipc通信

const mainWin = createWindow()
global.windows = {}
global.windows.home = mainWin
mainWin.webContent.send('custom-evt', data)

// renderer
import { ipcRenderer } from electron
ipcRender.on('custom-evt', data => {
	console.log(data)
})

Debug

使用vscode使用attach方式debug

electron index.dev.js —inspect=5858

{
  // 使用 IntelliSense 了解相关属性。
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach",
      "port": 5858,
      "address": "localhost"
    }
  ]
}

Electron npm script

# electron-npm script
export npm_config_target=1.7.10 # Electron's version. Find with ./node_modules/.bin/electron -v
export npm_config_arch=x64 # The architecture.
export npm_config_runtime=electron # Tell node-pre-gyp we are building for Electron.
export npm_config_build_from_source=true # Tell node-pre-gyp to build module from source code.
npm install $1 # Replace with the first argument passed.

Error: Electron failed to install correctly, please delete node_modules/electron and try installing again · Issue #8466 · electron/electron

Security, Native Capabilities, and Your Responsibility | Electron

其它

Electron 应用实战 (架构篇) · Issue #13 · sorrycc/blog · GitHub

GitHub - electron-userland/electron-builder: A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box 基于electron-packager

GitHub - electron/electron-rebuild: Package to rebuild native Node.js modules against the currently installed Electron version

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant