尝试使用node app.js
启动应用程序时,出现此错误:
lucas@XYZ:~/app/lucas$ node app.js
module.js:583
return process.dlopen(module, path._makeLong(filename));
^
Error: Module version mismatch. Expected 48, got 57.
at Error (native)
at Object.Module._extensions..node (module.js:583: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)
at Object.<anonymous> (/home/lucas/app/lucas/node_modules/canvas/lib/bindings.js:3:18)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
当我输入node -v
时,我会得到v6.5.0
如this website所示,这对应于版本48,那么57的来源是什么?
我知道默认的解决方案是删除node_modules,但是我想了解这里发生的事情并尝试避免这种情况,以及其他涉及重新安装所有模块的类似方法。问题更多是关于了解实际问题。 / p>
编辑:如果您好奇该bindings.js
文件中的内容,那就是里面的全部内容:
'use strict';
module.exports = require('../build/Release/canvas.node');
答案 0 :(得分:2)
简单地说,节点6.x试图打开为节点8.x构建的a native module。
基于回溯,它是canvas
模块–在某种程度上,您最终在canvas
中为运行node_modules
的{{1}}提供了一个本机模块,而不是运行该节点的模块。 (发生这种情况的一种方法是使用nvm
,n
或其他节点版本管理器。)
您不一定非要node_modules
的全部来解决此问题(尽管它不会受到伤害,并且如果您的项目无法幸免于node_modules
,那是一个问题本身)–您可以尝试将node_modules/canvas
重命名为node_modules/canvas.backup
或其他名称,然后再次运行npm install
(或yarn install
)(并激活正确的Node版本),并且应该下载/重新安装canvas
的本机模块,因为它正在重新安装现在“丢失”的canvas
。