web-dev-qa-db-ja.com

エラー:指定されたモジュールが見つかりませんでした

私は Edge.js を使用して、.NETコードを実行し、Electronアプリのウィンドウに印刷しようとしています。私は electron-Edge を試しました Electronのドキュメントの手順 に従って、ElectronをターゲットにしたEdge.jsモジュールを手動で構築しようとしましたが、次のようになりましたパッケージアプリでEdgeを使用しようとするとエラーが発生します。

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モジュールが存在します。私の疑いは、どういうわけかモジュールを正しく構築しておらず、おそらく間違ったバージョンのノードをターゲットにしているため、electronがモジュールをインポートできないことです。

electron-Edgeの手順 を含むいくつかの異なることを試して、build.batを手動で更新し、--target=1.4.12 --dist-url=https://atom.io/download/atom-Shellフラグをnode-gyp configure buildに追加しました。

また、.npmrcに次のnpm構成オプションを設定します。

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を実行しましたが、同じ結果が得られました。

17
Douglas Ludlow

数日間キーボードに頭をぶつけた後、ようやくこれを理解しました。 electron-userland/electron-packager#217 および electron/electron#892 からいくつかのヒントを得ました。これは、「指定されたモジュールが見つかりませんでした」というエラーが発生する可能性があることを示していましたネイティブモジュールに.dllなどの依存関係がなく、 Dependency Walker を使用して、任意の.nodeモジュールの依存関係を確認できる場合。

Dependency WalkerにEdge_nativeclr.nodeをロードしましたが、Visual Studio 2015 CランタイムであるVCRUNTIME140.DLLがないことに気付きました。 Edge.jsにはVisual Studio 2013 Cランタイムのmsvcr120.dllが付属していますが、msvs_versionを2015に設定してモジュールを再構築しています。

vcruntime140.dllのコピーをEdge_nativeclr.nodeと同じディレクトリに配置すると、すべてが期待どおりに機能し始めました。

25
Douglas Ludlow

VC++再頒布可能x64を正しくインストールしていても、このエラーが発生しました。私の場合のエラーは、すべてが正常に機能したため、実際には問題ではなかったことがわかりました(electron-Edgeでelectron-quick-startアプリを実行できました)。

それでも、作成者はエラーが発生しないようにインストールを修正しました。 https://github.com/kexplo/electron-Edge/issues/25#issuecomment-272908409

補足として、Dependency WalkerでEdge_nativeclr.nodeをロードすると、VCRUNTIME140.DLLが正しく解決されます(たとえば、PCのC:\ Windows\System32の下など)。ただし、いくつかの疑問符やエラーが表示される場合があります。これらは、Dependency Walkerのいくつかの制限によるものであり、実際の問題ではないことがわかりました。参照 Dependency Walker:行方不明のDLL

1
victtim