Skip to content

Electron - 环境变量

环境变量是一种强大的方式,可以在不修改代码的情况下控制应用的配置和行为。Electron 的一些行为由环境变量管理,因为它们在命令行参数或应用代码生效之前就已经初始化了。

Electron 识别多种环境变量,大致分为用于生产环境(production)和用于开发/调试(development/debugging)两类。

这些变量主要用于打包后的 Electron 应用的运行时(runtime)。

变量描述
ELECTRON_NO_ASAR当设置为 true 时,禁用 ASAR 归档支持。这对于调试与 ASAR 打包相关的问题非常有用。通常,ASAR 归档通过连接文件来提升性能。
ELECTRON_RUN_AS_NODE设置后,Electron 将进程作为正常的 Node.js 进程启动,绕过典型的 Electron 应用生命周期。这对于运行需要 Electron 捆绑 Node 提供的 Node.js API 的工具脚本或测试非常有用。
GOOGLE_API_KEYElectron 对某些位置 API 使用 Google 的地理编码(geocoding)网络服务。如果你的应用频繁发出地理编码请求,默认的共享 API 密钥可能会达到速率限制(rate limits)。在你的主进程文件(main process file)中、在任何需要地理编码的窗口打开之前,将此变量设置为你自己的 Google API 密钥:
process.env.GOOGLE_API_KEY = 'YOUR_OWN_API_KEY';
ELECTRON_FORCE_WINDOW_MENU_BAR (仅限 Linux)在某些 Linux 发行版上,Electron 默认可能使用全局菜单栏。设置此变量(例如 ELECTRON_FORCE_WINDOW_MENU_BAR=1)会强制 Electron 使用窗口自己的菜单栏而不是全局菜单栏。

这些变量主要用于开发和调试目的。

变量描述
ELECTRON_ENABLE_LOGGING设置后(例如 ELECTRON_ENABLE_LOGGING=true),会将 Chrome 的内部日志消息打印到控制台。这可能会非常详细,但对于诊断底层问题很有帮助。
ELECTRON_ENABLE_STACK_DUMPING设置后(例如 ELECTRON_ENABLE_STACK_DUMPING=true),如果应用崩溃,Electron 会将堆栈跟踪(stack trace)打印到控制台。这对于识别原生崩溃的源头非常有用。
ELECTRON_DISABLE_SANDBOX (谨慎使用)当设置为 true 时,这会禁用所有进程(包括渲染进程 renderer processes)的 Chromium 沙箱(sandbox)。这对于某些调试场景或者你需要在不使用预加载脚本(preload script)的情况下直接在渲染进程中使用 Node.js 功能时很有用,但这会显著降低安全性。通常建议保持沙箱启用,并使用预加载脚本来访问 Node.js。
ELECTRON_DEFAULT_ERROR_MODE (仅限 Windows)在 Windows 上,设置此变量(例如 ELECTRON_DEFAULT_ERROR_MODE=true)会在 Electron 崩溃时显示 Windows 崩溃对话框,这可能会提供更多关于崩溃的系统级信息。

如何设置环境变量取决于你的操作系统和 Shell。

对于 Windows(命令提示符 Command Prompt)

Section titled “对于 Windows(命令提示符 Command Prompt)”
set ELECTRON_ENABLE_LOGGING=true
REM 现在从同一个终端运行你的 electron 应用
$env:ELECTRON_ENABLE_LOGGING="true"
# 现在从同一个终端运行你的 electron 应用
export ELECTRON_ENABLE_LOGGING=true
# 现在从同一个终端运行你的 electron 应用

这些设置通常只对当前的终端会话(terminal session)有效。要使它们永久生效,你需要将它们添加到你的 Shell 配置文件中(例如 .bashrc、.zshrc 或 Windows 系统属性中的“环境变量”设置)。

为了在 package.json 脚本中实现跨平台一致性,可以考虑使用像 cross-env 这样的工具:

// 首先,安装它:npm install --save-dev cross-env
// 然后,在 package.json 脚本中:
"scripts": {
"start-debug": "cross-env ELECTRON_ENABLE_LOGGING=true electron ."
}