无法在 Windows 上使用电子 4.0.6 加载一些本机节点 js 模块
Posted
技术标签:
【中文标题】无法在 Windows 上使用电子 4.0.6 加载一些本机节点 js 模块【英文标题】:Unable to load some native node js modules with electron 4.0.6 on Windows 【发布时间】:2019-08-13 01:33:59 【问题描述】:我正在尝试将我的应用程序从电子 1.8.1 升级到 4.0.6。我正在使用多个本机节点 js 模块。它们都编译成功(或预编译的二进制文件可用)。
在需要其中一个模块时出现以下错误。
XXXX\node_modules\electron-log\renderer.js:34 [10:14:51.109] Failed to add
module. Error: Error: The specified procedure could not be found.
\?\XXXXX\node_modules\pc-ble-driver-js\build\Release\pc-ble-driver-js-
sd_api_v2.node
而其他本机模块(例如 serialport、noble-uwp)正在加载并正常工作。
此错误通常表示缺少所需的 DLL。我已经使用 Dependency Walker (http://www.dependencywalker.com/) 来检查依赖关系,但我无法确定错误。我试图比较有效模块的依赖关系和我遇到错误的模块的依赖关系。我没有看到明显的差异。
我已安装 Visual Studio 2015。我还安装了 VC++ 2015 可再发行组件。
我的电子特定依赖项是:
"devDependencies":
"electron": "~4.0.6",
"electron-builder": "~20.39.0",
"electron-rebuild": "^1.8.4"
,
我正在使用 node-js 10.15.3。
我注意到在电子 3 之前,node_modules/electron/dist 存在许多 DLL。电子 4 不存在这些 DLL。
是否需要安装任何其他依赖项才能使本机模块与 electron 4 一起使用?
【问题讨论】:
【参考方案1】:我得到了这个工作。
要让原生 node js 模块在 Windows 上与 electron 4 一起工作,它需要使用“延迟加载挂钩”进行编译。更多信息:https://electronjs.org/docs/tutorial/using-native-node-modules#a-note-about-win_delay_load_hook 和 https://github.com/nodejs/node-addon-api/issues/269#issuecomment-455580129。进行这些更改后,我失败的模块开始工作。
关于其他模块在没有这些更改的情况下工作的原因是因为它们直接使用 node-gyp。它负责使用这个钩子。
我失败的模块使用了 cmake-js,它需要上面提到的额外更改。
【讨论】:
以上是关于无法在 Windows 上使用电子 4.0.6 加载一些本机节点 js 模块的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 asmack 版本 asmack-android-8-4.0.6.jar 在 xmpp 中返回组列表
佳能打印机iRADV_C5200Series在windows 10下无法使用电子复印的解决方法