当我尝试使用带有桌面Node shell的无头浏览器时,我收到了一个"模块版本不匹配错误"。我试过Zombiejs和Phantomjs,它们都有nw.js和atom-shell;在这两种情况下,只要无头浏览器开始运行,应用程序就会因模块不匹配错误而崩溃。
以下是Phantomjs和原子外壳的错误:
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)
知道是什么导致了这个错误吗?
错误是从Node.js内部抛出的。您正在混合为不同版本的io.js或Node.js构建的二进制模块。模块版本指的是C++NODE_MODULE_VERSION
宏,该宏在JavaScript中可作为process.versions.modules
访问。
14似乎是自Node.js v0.11.11以来Node.js的版本号。
我找不到任何关于41的信息,尽管很明显42是io.jsv1.0.0使用的版本号。
UPDATE:41是io.js内部绑定在atom shell中的版本,它是从io.js v1.0.0-pre
中截取的。
nw.js/atom-shell使用自己的Node.js副本来执行引擎。在终端中,尝试在不进入atom shell的情况下进行干净的安装和执行。
还要注意,这个问题不应该是Phantom.js或Zombie.js独有的,而是所有使用C++代码的模块独有的。
要解决此问题,请使用以下说明之一:
- atomshell提供了一个使用本机模块的教程
- nw.js还有一个教程