【问题标题】:How do I load my own native node modules in my Electron app?如何在我的 Electron 应用程序中加载我自己的本机节点模块?
【发布时间】:2022-01-06 00:00:40
【问题描述】:

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

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

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

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 目录的所有其他本机模块都可以正常加载。

附:如果我将foo.node 复制到预期位置之一,则模块加载正常。

【问题讨论】:

  • 哪个环境?开发还是构建之后?
  • 它现在似乎工作了,但我仍在重现发生的事情。我会尽快更新我的问题
  • 所以运行时的目录似乎是my-electron-app/ 所以它应该如何从./foo 猜测my-electron-app/foo/build/Release/ .. 我不确定,但也许这就是电子不是的原因寻找 foo
  • npm inode_modules 中创建了符号链接

标签: node.js electron node-native-addon


【解决方案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 :)

这是另一个option from SO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多