跳转到主要内容

DevTools 扩展

Electron 支持 Chrome DevTools 扩展,这些扩展可以用来增强 Chrome 开发者工具的功能,以便调试流行的 Web 框架。

使用工具加载 DevTools 扩展

加载 DevTools 扩展最简单的方法是使用第三方工具来自动执行该过程。 electron-devtools-installer 是一个流行的 NPM 包,可以做到这一点。

手动加载 DevTools 扩展

如果您不想使用工具方法,也可以手动执行所有必要的操作。要在 Electron 中加载扩展,您需要通过 Chrome 下载它,找到其文件系统路径,然后通过调用 Sessionses.loadExtension API 将其加载。

React Developer Tools 为例

  1. 在 Google Chrome 中安装扩展。

  2. 导航到 chrome://extensions,找到其扩展 ID,这是一个类似 fmkadmapgofadopljbjfkapdkoienihi 的哈希字符串。

  3. 确定 Chrome 用于存储扩展的文件系统位置

    • 在 Windows 上,它是 %LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensions
    • 在 Linux 上,可能是
      • ~/.config/google-chrome/Default/Extensions/
      • ~/.config/google-chrome-beta/Default/Extensions/
      • ~/.config/google-chrome-canary/Default/Extensions/
      • ~/.config/chromium/Default/Extensions/
    • 在 macOS 上,它是 ~/Library/Application Support/Google/Chrome/Default/Extensions
  4. 将扩展的位置传递给 ses.loadExtension API。对于 React Developer Tools v4.9.0,它看起来像这样

    const { app, session } = require('electron')

    const os = require('node:os')
    const path = require('node:path')

    // on macOS
    const reactDevToolsPath = path.join(
    os.homedir(),
    '/Library/Application Support/Google/Chrome/Default/Extensions/fmkadmapgofadopljbjfkapdkoienihi/4.9.0_0'
    )

    app.whenReady().then(async () => {
    await session.defaultSession.loadExtension(reactDevToolsPath)
    })

备注

  • loadExtension 返回一个 Promise,其中包含一个 Extension 对象,其中包含有关已加载扩展的元数据。在加载页面之前,需要解析此 Promise(例如,使用 await 表达式)。否则,无法保证扩展程序将被加载。
  • app 模块的 ready 事件发出之前,不能调用 loadExtension,也不能在内存(非持久)会话中调用它。
  • 如果希望加载扩展,必须在每次启动应用程序时调用 loadExtension

移除 DevTools 扩展

您可以将扩展的 ID 传递给 ses.removeExtension API,以将其从 Session 中移除。加载的扩展在应用程序启动之间不会持久保存。

DevTools 扩展支持

Electron 仅支持 有限的 chrome.* API,因此在底层使用不受支持的 chrome.* API 的扩展可能无法正常工作。

以下 Devtools 扩展经过测试可在 Electron 中工作

如果 DevTools 扩展无法工作,我应该怎么办?

首先,请确保扩展仍在维护中,并且与最新版本的 Google Chrome 兼容。我们无法为不受支持的扩展提供额外的支持。

如果扩展在 Chrome 上可以工作但在 Electron 上无法工作,请在 Electron 的 issue tracker 中提交错误报告,并描述扩展的哪一部分未按预期工作。