错误:找不到指定的模块

Posted

技术标签:

【中文标题】错误:找不到指定的模块【英文标题】:Error: The specified module could not be found 【发布时间】:2017-05-06 07:50:03 【问题描述】:

我正在尝试使用 edge.js 执行一些 .NET 代码以在 Electron 应用程序的窗口上打印。我已经尝试过electron-edge,并且我还尝试在instructions in the Electron docs 之后手动构建针对 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-edge's steps 手动更新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文件,但得到了相同的结果。

【问题讨论】:

您是否再次确保案例相同? @Mike'Pomax'Kamermans - 路径中的情况?是的,都是小写的。 【参考方案1】:

在我的头撞在键盘上几天之后,我终于弄明白了。我从electron-userland/electron-packager#217electron/electron#892 得到了一些提示,它们指出当本机模块缺少依赖项(例如.dll)时,可能会出现此错误“找不到指定的模块”,并且您可以使用Dependency Walker 检查任何给定.node 模块的依赖关系。

我在 Dependency Walker 中加载了 edge_nativeclr.node,并注意到 Visual Studio 2015 C 运行时 VCRUNTIME140.DLL 丢失了。 Edge.js 附带 msvcr120.dll,即 Visual Studio 2013 C 运行时,但我一直在重建模块,并将 msvs_version 设置为 2015。

一旦我将vcruntime140.dll 的副本放在与edge_nativeclr.node 相同的目录中,一切都开始按预期工作。

【讨论】:

我们遇到了类似的问题。我们按照上面的建议使用了 Dependency Walker,并确定电子打包程序将其打包为 win32-x64。这将查找 64 位 VCRUNTIME140.DLL。请注意,您需要安装 64 位 Visual Studio C++ Redistributable 才能获得正确的 dll。我们最初安装的是 32 位版本。 随电子应用一起安装或打包。 它是单独安装的。您可以在您的电子应用程序中包含可再分发的内容吗? @Chadley08,是的,您只需将 dll 包含在您的应用中,确保它与 edge_nativeclr.node 文件位于同一文件夹中。 关于 Dependency Walker,可以在github.com/lucasg/Dependencies找到更新的版本【参考方案2】:

即使我确实正确安装了 VC++ Redistributable x64,我也遇到了这个错误。事实证明,我的错误实际上并不是问题,因为一切正常(我能够使用 electron-edge 运行电子快速启动应用程序)。

即便如此,作者还是修复了安装,以免出现错误。 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: missing dlls

【讨论】:

以上是关于错误:找不到指定的模块的主要内容,如果未能解决你的问题,请参考以下文章

错误“找不到指定的模块”

易语言问题 错误(36): 找不到指定的对象成员命令名称“取文本长度”。

易语言:错误(36): 找不到指定的对象成员命令名称“打开”。

错误:找不到指定的模块

启动时出现问题,找不到指定模块怎么回事???

加载DLL文件时出错,找不到指定的模块,如何解决?