electron api 01

发布于 2020-11-09  759 次阅读


综述

electron 提供了一些内置的模块用于桌面应用的开发。有些模块仅能主进程使用,有些仅能渲染进程使用,有些二者均可。

详细内容

process

electron 的 process 从 node.js 扩展而来。添加了如下事件,属性以及方法:

sandbox - sandbox 中的 renderer,其可供使用的 API 受限。

crash();hang();getCreationTime();getHeapStatistics();getBlinkMemoryInfo();
getProcessMemoryInfo();getSystemMemoryInfo();getSystemVersion();
getCPUUsage();getIOCounters();argv;execPath;env;pid;arch;platform;
sandboxed;type;version;versions;mas;windowsStore;

events

// preload.js
const _setImmediate = setImmediate
const _clearImmediate = clearImmediate
process.once('loaded', () => {
  global.setImmediate = _setImmediate
  global.clearImmediate = _clearImmediate
})

properties

process.defaultApp;
process.isMainFrame;
process.mas;
process.noAsar;
process.noDeprecation;
process.resourcesPath;
process.sandboxed;
process.throwDeprecation;
process.traceDeprecation;
process.traceProcessWarnings;
process.type; // browser renderer worker
process.versions.chrome;
process.versions.electron;
process.windowsStore;

methods

process.crash(); // 引发当前进程的主线程 crash
process.getCreationTime();
process.getCPUUsage();
process.getIOCounters(); //就是读写计数
process.getHeapStatistics(); // 获取v8堆数据情况,所有单位为 kilobytes
process.getBlinkMemoryInfo(); // 不理解
process.getProcessMemoryInfo(); // 获取当前进程的内存信息
process.getSystemMemoryInfo(); // 获取系统内存信息
process.getSystemVersion();
process.takeHeapSnampShot(filepath); //堆快照
process.hang(); // 进程挂起
process.setFFdLimit(maxDescriptors);// mac linux 设置文件描述符的软限制

支持的命令行切换

const { app } = require('electron')
app.commandLine.appendSwitch('remote-debugging-port', '8315')
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1')

app.whenReady().then(() => {
  // Your code here
})

命令行参数flag如下

--auth-server-whitelist='*example.com, *foobar.com, *baz'

// --auth-negotiate-delegate-whitelist=url
// --disable-ntlm-v2
// --disable-http-cache
// --disable-http2
// --disable-renderer-backgrounding
// --disk-cache-size=size
// --enable-api-filtering-logging
// --enable-logging
// --host-rules=rules
// --host-resolver-rules=rules
// --ignore-certificate-errors
// --ignore-connections-limit=domains
// electron --js-flags="--harmony_proxies --harmony_collections" your-app
// --lang
// --log-net-log=path
// --no-proxy-server
// --no-sandbox
// --proxy-bypass-list=hosts
const { app } = require('electron')
app.commandLine.appendSwitch('proxy-bypass-list', '<local>;*.google.com;*foo.com;1.2.3.4:5678')
// --proxy-pac-url=url
// --proxy-server=address:port
// --remote-debugging-port=port
// --ppapi-flash-path=path
// --ppapi-flash-version=version
// --v=log_level
// --vmodule=pattern
// --force_high_performance_gpu 强制使用多个gpu提升性能
// --force_low_power_gpu

node.js 的 flag 如下

// --inspect-brk[=[host:]port]
// --inspect-port=[host:]port
// --inspect[=[host:]port]
// --inspect-publish-uid=stderr,http

环境变量

electron 某些行为受环境变量约束

NODE_OPTIONS
// 不支持如下参数
//--use-bundled-ca
//--force-fips
//--enable-fips
//--openssl-config
//--use-openssl-ca

GOOGLE_API_KEY
process.env.GOOGLE_API_KEY = 'YOUR_KEY_HERE'

ELECTRON_NO_ASAR

ELECTRON_RUN_AS_NODE

ELECTRON_NO_ATTACH_CONSOLE

ELECTRON_FORCE_WINDOW_MENU_BAR - linux 强制不使用全局 menu bar

ELECTRON_TRASH

chrome 扩展支持

electron 支持 chrome extension api 中的一部分接口。

载入扩展,仅支持未压缩的

const { session } = require('electron')

session.loadExtension('path/to/unpacked/extension').then(({ id }) => {
  // ...
})

支持的扩展 API

chrome.devtools.inspectedWindow
chrome.devtools.network
chrome.devtools.panels
chrome.extension
chrome.runtime
chrome.storage
chrome.tabs
chrome.management

朝闻道,夕死可矣