我正在终端上运行一个节点应用程序。最近已经升级到节点v8.5.0,但我得到这个错误:

Error: The module '/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (module.js:653:18)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/tidee/tidee-au/packages/tidee-au-server/node_modules/babel-register/lib/node.js:152:7)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/server/helpers/encryptPass.js:1:16)

知道怎么解决吗?


当前回答

简单地运行:

NPM卸载bcrypt

紧随其后的是:

NPM install bcrypt(或者NPM install,如果bcrypt在你的包中被声明为依赖项)。json文件)

其他回答

我在用systemd运行我的应用程序时得到了这个错误:

ExecStart=/usr/local/bin/node /srv/myapp/server.js

但是我在shell中使用了不同的npm安装版本:

$ which node
/home/keith/.nvm/versions/node/v8.9.0/bin/node

如果这是您的设置,您可以在服务文件中硬编码节点版本,或者采用类似这样的解决方法。

你必须重新构建包,并告诉npm更新它也是二进制的。试一试:

npm rebuild bcrypt --update-binary

@robertklep用这个命令回答了一个相关的问题,看。

只有重建还没有解决我的问题,这在我的应用程序工作得很好。

在尝试了不同的东西之后。 这工作。

删除节点模块文件夹并运行

npm i

以下是对我有效的方法。我使用循环节点模块与电子Js和面临这个问题。在尝试了很多事情之后,以下的工作对我来说。

在你的包裹里。Json文件在脚本中添加以下行:

  ... 
"scripts": {
        "start": "electron .",
        "rebuild": "electron-rebuild"
    
      },
...

然后运行以下命令npm run rebuild

可能是节点JS版本不一致导致了这个问题。如文档中所述。一定要使用其中一个版本。例如,在Dockerfile中指定:

# Pull lts from docker registry
FROM node:8.12.0

# ...