2

当我尝试使用带有桌面节点外壳的无头浏览器时,我收到“模块版本不匹配错误”。我用 nw.js 和 atom-shell 尝试过 Zombiejs 和 Phantomjs;在这两种情况下,只要无头浏览器开始运行,应用程序就会因模块不匹配错误而崩溃。

这是 Phantomjs 和 atom-shell 的错误:

Uncaught Exception:
Error: Module version mismatch. Expected 41, got 14.
    at Error (native)
    at Object.module.(anonymous function) (ATOM_SHELL_ASAR.js:118:20)
    at Object.module.(anonymous function) [as .node] (ATOM_SHELL_ASAR.js:118:20)
    at Module.load (module.js:370:32)
    at Function.Module._load (module.js:325:12)
    at Module.require (module.js:380:17)
    at require (module.js:399:17)
    at bindings (/Users/Ajay/Projects/atom-shell/node_modules/phantom/node_modules/dnode/node_modules/weak/node_modules/bindings/bindings.js:76:44)
    at Object.<anonymous> (/Users/Ajay/Projects/atom-shell/node_modules/phantom/node_modules/dnode/node_modules/weak/lib/weak.js:7:35)
    at Module._compile (module.js:475:26)

知道是什么导致了错误吗?

4

1 回答 1

6

该错误是从Node.js internals引发的。您正在混合为不同版本的 io.js 或 Node.js 构建的二进制模块。模块版本是指 C++NODE_MODULE_VERSION宏,它在 JavaScript 中可作为process.versions.modules.

自 Node.js v0.11.11 起,14 似乎是 Node.js 的版本号。

我找不到关于 41 的任何信息,尽管很明显 42 是io.js v1.0.0使用的版本号。

更新:41 是内部捆绑在atom-shell中的 io.js 版本,它是从 io.js 中删除的v1.0.0-pre

nw.js/atom-shell 使用它自己的 Node.js 副本来执行引擎。在终端中,尝试在不使用 atom-shell 的情况下进行干净的安装和执行。

还要注意这个问题不应该是 Phantom.js 或 Zombie.js 独有的,而是所有使用 C++ 代码的模块。

要解决此问题,请使用以下说明之一:

  • atom-shell 提供了使用本机模块的教程
  • nw.js 也有教程
于 2015-02-28T06:52:49.263 回答