Ошибка: указанный модуль не найден
Я пытаюсь использовать edge.js для выполнения кода.NET для печати на окнах в приложении Electron. Я пробовал электронное ребро, и я также пытался вручную создать модули edge.js для Electron, следуя инструкциям в документации Electron, но я продолжаю получать следующую ошибку, когда пытаюсь использовать ребро в упакованном приложении:
Error: The specified module could not be found.
\\?\C:\path\to\app\app-1.0.0\resources\app.asar.unpacked\node_modules\edge\lib\native\win32\x64\6.5.0\edge_nativeclr.node
at Error (native)
at process.module.(anonymous function) (ELECTRON_ASAR.js:178:20)
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:178:20)
at Object.Module._extensions..node (module.js:583:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:192:18)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
Я проверил файловую систему и edge_nativeclr.node
Модуль действительно существует. Я подозреваю, что я почему-то неправильно собираю модуль, и, возможно, он все еще нацелен на неправильную версию узла, поэтому электрон не может импортировать модуль.
Я пробовал несколько разных вещей, в том числе следуя инструкциям электронного края, чтобы вручную обновить build.bat
и добавить --target=1.4.12 --dist-url=https://atom.io/download/atom-shell
флаги для узла-гипа configure build
,
Я также установил следующие параметры конфигурации npm в моем .npmrc
:
target=1.4.12
arch=x64
target_arch=x64
disturl=https://atom.io/download/electron
runtime=electron
build_from_source=true
msvs_version=2015
И побежал build.bat
, убедившись, чтобы установить EDGE_NATIVE
переменная среды, чтобы указать на сгенерированный edge_nativeclr.node
файл, но получил тот же результат.
2 ответа
Я наконец-то понял это после того, как несколько дней ударился головой о клавиатуру. Я получил некоторые подсказки от electron-userland/electron-packager#217
а также electron/electron#892
, которая указала, что эта ошибка, "Указанный модуль не может быть найден", может произойти, когда у собственного модуля отсутствует зависимость, такая как .dll
и что вы можете использовать Dependency Walker для проверки зависимостей любого данного .node
модуль.
Я загрузил edge_nativeclr.node
в Dependency Walker и заметил, что VCRUNTIME140.DLL
среда выполнения Visual Studio 2015 C отсутствовала. Edge.js поставляется с msvcr120.dll
среды выполнения Visual Studio 2013 C, но я перестраивал модуль с помощью msvs_version
установить на 2015 год.
Однажды я разместил копию vcruntime140.dll
в том же каталоге, что и edge_nativeclr.node
все заработало как положено.
Я также получил эту ошибку, несмотря на то, что VC++ Redistributable x64 был установлен правильно. Оказывается, ошибка в моем случае на самом деле не была проблемой, поскольку все работало нормально (я смог запустить приложение быстрого запуска с электронным фронтом).
Несмотря на это, автор исправил установку, чтобы ошибка не возникала. https://github.com/kexplo/electron-edge/issues/25
Кроме того, если вы загрузите edge_nativeclr.node в Dependency Walker, вы увидите, что VCRUNTIME140.DLL правильно разрешен (например, в C:\Windows\System32 на моем ПК). Тем не менее, вы можете увидеть несколько вопросительных знаков и ошибок. Оказывается, это просто из-за некоторых ограничений в Dependency Walker, а не из-за реальной проблемы. Смотрите Зависимость Уокер: пропавших без вести