错误:模块版本不匹配-未删除node_modules

时间:2019-03-08 11:45:23

标签: node.js

尝试使用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');

1 个答案:

答案 0 :(得分:2)

简单地说,节点6.x试图打开为节点8.x构建的a native module

基于回溯,它是canvas模块–在某种程度上,您最终在canvas中为运行node_modules的{​​{1}}提供了一个本机模块,而不是运行该节点的模块。 (发生这种情况的一种方法是使用nvmn或其他节点版本管理器。)

您不一定非要node_modules的全部来解决此问题(尽管它不会受到伤害,并且如果您的项目无法幸免于node_modules,那是一个问题本身)–您可以尝试将node_modules/canvas重命名为node_modules/canvas.backup或其他名称,然后再次运行npm install(或yarn install)(并激活正确的Node版本),并且应该下载/重新安装canvas的本机模块,因为它正在重新安装现在“丢失”的canvas