首页 > 解决方案 > Electron:无法在生产构建中加载 chrome 扩展

问题描述

我正在尝试通过以下方式在电子应用程序中加载 chrome 扩展程序,

const extenPath = path.join(_dir, "build/extensions/extension_name");
const response = await session.defaultSession.loadExtension(extenPath);

该扩展在开发模式下加载正常,但由于引发以下错误而无法加载生产构建。

Error: Extension directory not found: D:\path\to\app\dist\win-unpacked\resources\app.asar\src\build\extensions\extension_name

我可以确认路径有效并且文件夹“extensions/extension_name”存在于“app.asar\src\build”中。我查看了“app.asar”的内容来检查“extensions/extension_name”的存在,并使用“fs”模块来检查它在我的“main.js”文件中的可访问性。

有没有人遇到过这个问题,或者我在这里做错了什么?

任何见解都会有很大帮助,谢谢。

标签: reactjsgoogle-chrome-extensionelectronelectron-builder

解决方案


我只是设法使用package.json 文件中的extraResources来做到这一点,如下所示:

"build": {
  "extraResources": [
    "./path/to/extensionFolder"
  ],
},

根据文档,这将

将具有匹配名称的文件或目录直接复制到应用程序的资源目录中(MacOS 为 Contents/Resources,Linux 和 Windows 为资源)

然后在 main.js 文件中我像这样导入它:

const extensionPath = __dirname.split("app.asar")[0] + "extensionFolder";

// __dirname will aim at your app.asar file (your package source code for your application) 
// that is in the resource directory, for example:
// C:\Users\Admin\AppData\Local\Programs\MyElectronApp\resources\app.asar

// and your extensionFolder is next to is, at:
// C:\Users\Admin\AppData\Local\Programs\MyElectronApp\resources\extensionFolder

session.defaultSession.loadExtension(extensionPath);

推荐阅读