错误:找不到指定的模块
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#217
和electron/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): 找不到指定的对象成员命令名称“取文本长度”。