开发者工具扩展

优质
小牛编辑
135浏览
2023-12-01

Electron supports Chrome DevTools extensions, which can be used to extend the ability of Chrome's developer tools for debugging popular web frameworks.

使用工具加载 DevTools 扩展

加载 DevTools 扩展的最简单方法是使用第三方工具,来为您实现自动化过程。 electron-devtools-installer 是一个受欢迎的 NPM 包。

手动加载 DevTools 扩展

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

下面以React Developer Tools为例:

  1. 在 Google Chrome 中安装扩展。

  2. 打开chrome://extensions,找到扩展程序的ID,像 fmkadmapgofadopljbjfkapdkoienihi 一样的 hash 字符串。

  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 path = require('path')
     const os = require('os')
    
     // 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,其中包含加载的扩展有关的元数据。 在加载页面前,此 Promise 需要被 resolve(例如使用 await 表达式)。 否则将无法保证扩展被加载。
  • loadExtension 无法在 app 模块 ready 之前调用,也不能被内存(非持久) 会话调用。
  • 如果您希望加载扩展,则必须在应用的每次启动时调用loadExtension

删除 DevTools 扩展

您可以将扩展的 ID 传递给 ses.removeExtension API,以将其从您的 Session 中删除。 每次应用重新启动,扩展不会持续。

DevTools 扩展支持

Electron 仅支持 有限的 chrome.* APIs ,所以使用不支持的 chrome.* 扩展的 APIs 可能无法工作。

以下 DevTools 扩展程序已经通过测试,可以在 Electron 中正常工作:

如果 DevTools 扩展不工作,我该怎么办?

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

如果扩展可以在 Chrome 上运行,但不能在 Electron 上运行, 在 Electron 的 issue Tracker 中提交一个错误,并描述扩展的哪个部分不能按预期工作。