Electron 无法从 node_modules 文件夹打开共享对象文件

问题描述

在电子上,节点模块 vosk 需要访问位于 node_modules/vosk/lib/ 中的一些共享对象。

我现在遇到的问题是,当我在 require('vosk') 中执行 main.js 并尝试执行我的 AppImage 文件时,我得到:

A JavaScript error occurred in the main process
Uncaught Exception:
Error: Dynamic Linking Error: /tmp/.mount_CantooClaxGf/resources/app.asar/node_modules/vosk/lib/linux-x86_64/libvosk.so: Cannot open the shared object: It's not a folder
    at new DynamicLibrary (/tmp/.mount_CantooClaxGf/resources/app.asar/node_modules/ffi-napi/lib/dynamic_library.js:75:11)
    at Object.Library (/tmp/.mount_CantooClaxGf/resources/app.asar/node_modules/ffi-napi/lib/library.js:47:10)
    at Object.<anonymous> (/tmp/.mount_CantooClaxGf/resources/app.asar/node_modules/vosk/index.js:24:21)
    at Module._compile (internal/modules/cjs/loader.js:1145:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1166:10)
    at Module.load (internal/modules/cjs/loader.js:981:32)
    at Module._load (internal/modules/cjs/loader.js:881:14)
    at Function.Module._load (electron/js2c/asar.js:769:28)
    at Module.require (internal/modules/cjs/loader.js:1023:19)
    at require (internal/modules/cjs/helpers.js:77:18)

我尝试将 vosk 添加到构建中的文件中:

 "build": {
    "files": [
      "dist/**/*","src/assets/icons/*","electron.js","package.json","assets/models/*","node_modules/vosk/lib/*"
    ],

我现在可以看到 app.asar.unpacked/node_modules/vosk/lib/ 文件夹中的文件,但是在执行应用程序时,我仍然遇到相同的错误。

我发现 this answer 提到了一个 hack,但它没有解决我的问题,我仍然遇到完全相同的错误。

我应该如何以vosk 会找到它们的方式打包共享对象?

解决方法

我可以通过这个电子配置解决这个问题,将 vosk 的所有依赖项放在 extraResources 字段中:

  "build": {
    "extraResources": [
      "node_modules/at-least-node/**/*","node_modules/builder-util-runtime/**/*","node_modules/debug/**/*","node_modules/ffi-napi/**/*","node_modules/fs-extra/**/*","node_modules/get-symbol-from-current-process-h/**/*","node_modules/get-uv-event-loop-napi-h/**/*","node_modules/graceful-fs/**/*","node_modules/jsonfile/**/*","node_modules/ms/**/*","node_modules/node-addon-api/**/*","node_modules/node-gyp-build/**/*","node_modules/ref-napi/**/*","node_modules/ref-struct-di/**/*","node_modules/sax/**/*","node_modules/universalify/**/*","assets/models/**/*"
    ],"files": [
      "dist/**/*","src/assets/icons/*","electron.js","package.json"
    ],

我还需要 this lib

它现在按预期工作

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...