我正在终端上运行一个节点应用程序。最近已经升级到节点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)

知道怎么解决吗?


当前回答

我在使用robotjs时也遇到了类似的问题。有一些废弃的代码需要节点v11,但我已经在v12上编译了电子代码。所以我得到了同样的错误。 这里没有任何工作,因为我基本上是试图将电子和其他依赖项从v12重建到节点v11。

以下是我所做的(部分是基于chitzui的回答,功劳在该有的地方):

备份package.json 完全删除node_modules文件夹 完全删除package_lock.json 删除包。Json(稍后将重新编译) 关闭项目目录下所有打开的编辑器和其他cmd窗口。 运行NPM init重新安装包,然后丢失旧备份的package.json中的数据 运行NPM I 固定

其他回答

您需要从node_modules文件夹中删除模块文件夹(bcrypt)并重新安装,使用以下命令:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn

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

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

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

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

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

我刚刚得到这个错误运行kadence安装的“kadence”脚本首先检查nodejs,如果没有nodejs只运行node。我把最新版本的node链接到我的~/bin目录中,但nodejs运行的是一个我忘记卸载的旧版本,但直到现在才出现问题。

所以有这个问题的人可能会检查node和nodejs是否实际运行相同版本的node…

对于电子模块,安装电子重建。

Format:
electron-rebuild -o <module_name> -v <electron version>

Example:
electron-rebuild -o myaddon -v 9.0.0-beta.6

指定当前目录中已安装的相同版本

你可能有这样的经验,一个标准的node-gyp构建将报告为64,然后一个基本的电子重建将报告76,直到你添加-v与确切的版本,它会颠簸到实际的版本80 (9.0.0-beta.6)

我遇到了同样的问题,这些解决方案都不起作用,我不知道为什么,它们在过去的类似问题上对我有效。

无论如何,为了解决这个问题,我只是使用node-pre-gyp手动重新构建包

cd node_modules/bcrypt
node-pre-gyp rebuild

一切都按照预期进行。

希望这能有所帮助