0

foo我为我的 Electron 应用程序构建了一个 C++ 本机模块。该模块位于我的项目根目录中。我package.json通过设置本地路径将项目添加到我的项目中 - 这是一个受支持并在此处描述的功能。

  "dependencies": {
    "thumbnail": "file:./foo",

当我npm i在我的 Electron 应用程序中执行时,所有本机模块都被编译并且我自己的模块吐出一个my-electron-app/foo/build/Release/foo.node二进制文件。但是通过在我的 Electron 应用程序中“导入”模块require("foo")失败,我收到以下错误:

vendor.js:40750 Uncaught Error: Could not locate the bindings file. Tried:
 → my-electron-app\build\foo.node
 → my-electron-app\build\Debug\foo.node
 → my-electron-app\build\Release\foo.node
 → my-electron-app\out\Debug\foo.node
 → my-electron-app\Debug\foo.node
 → my-electron-app\out\Release\foo.node
 → my-electron-app\Release\foo.node
 → my-electron-app\build\default\foo.node
 → my-electron-app\compiled\12.13.0\win32\x64\foo.node
 → my-electron-app\addon-build\release\install-root\foo.node
 → my-electron-app\addon-build\debug\install-root\foo.node
 → my-electron-app\addon-build\default\install-root\foo.node
 → my-electron-app\lib\binding\node-v76-win32-x64\foo.node
    at bindings (vendor.js:40750)
    at Object.1YQR (main.js:679)
    at __webpack_require__ (runtime.js:85)
    at Object.Iz1V (main.js:9075)
    at __webpack_require__ (runtime.js:85)
    at Object.4qKS (main.js:2900)
    at __webpack_require__ (runtime.js:85)
    at Object.Sy1n (main.js:12933)
    at __webpack_require__ (runtime.js:85)
    at Object.ZAI4 (main.js:15110)

如您所见,foo.node不在其实际模块目录中搜索my-electron-app/foo/build/Release/.

位于node_modules/并包含build/Release目录的所有其他本机模块都可以正常加载。

PS如果我复制foo.node到预期的位置之一,模块加载正常。

4

1 回答 1

1

我可以建议尝试通过yarn它来为您正确处理许多依赖项并链接任何自定义内容。

// add your native module as a dependency to the project. 
// this will hook your custome module to `yarn`/`webpack`/`electron-builder` 

// Now do to tell it build
 `yarn add link:../path/to/native/myModule` 

我还有其他几个选择,但我更喜欢保持简单的 KISS :)

这是SO的另一个选择

于 2021-12-08T00:01:02.367 回答