【问题标题】:Electron: Unable to load chrome extension in production buildElectron:无法在生产构建中加载 chrome 扩展
【发布时间】:2021-11-06 17:44:15
【问题描述】:

我正在尝试通过,在电子应用中加载 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”文件中的可访问性。

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

  • 操作系统:Windows
  • 电子:^13.1.2
  • 电子制造商:^22.11.7
  • 构建命令:set NODE_ENV=production && electron-builder build --win

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

【问题讨论】:

  • 确保 manifest.json 在extension_name 目录中,而不是在子目录中。
  • @wOxxOm 是的,manifest.json 在 extension_name 目录中。

标签: reactjs google-chrome-extension electron electron-builder


【解决方案1】:

我只是设法在 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多