Невозможно загрузить некоторые модули js собственного узла с электронным 4.0.6 в Windows - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь обновить приложение с версии 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"
},

Я использую нод-js 10.15.3.

Я заметил, что до электрона 3 в node_modules / Electron / Dist присутствовало много DLL-библиотек. Эти библиотеки DLL не присутствуют с электроном 4.

Нужны ли какие-либо дополнительные зависимости длябыть установленным для родных модулей для работы с электроном 4?

1 Ответ

0 голосов
/ 25 марта 2019

Я получил это на работу.

Чтобы модули js собственного узла работали с электроном 4 в Windows, его нужно скомпилировать с помощью "Delay Load Hook".Дополнительная информация: 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, который требует вышеупомянутых дополнительных изменений.

...