Ошибка: указанный модуль не найден

Я пытаюсь использовать 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, а не из-за реальной проблемы. Смотрите Зависимость Уокер: пропавших без вести

Другие вопросы по тегам