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

知道怎么解决吗?


当前回答

我得到了同样的错误,但我试图运行一个节点应用程序使用Docker容器。

我通过添加一个.dockerignore文件来忽略node_modules目录来修复它,以确保当构建docker映像时,它为我想要的映像(Alpine)构建本机包,而不是复制为我的主机(Debian)编译的node_modules。

其他回答

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

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

这个问题很可能是package-lock.json造成的。它似乎会阻止你重新编译或重建依赖项,即使你显式地运行npm rebuild。我运行了以下所有程序来修复它:

rm package-lock.json;
rm -rf node_modules;
npm install;

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

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

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

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

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

您可以完全删除bcrypt并安装bcryptjs。它慢了大约30%,但是没有依赖,所以安装它并不痛苦。

npm i -S bcryptjs && npm uninstall -S bcrypt

我们已经成功地为我们的应用程序安装了它。我们遇到了bcrypt无法在Node v8.x的AWS实例上编译的问题

在我的例子中,我运行的是nodejs而不是node。由于nodejs是由包管理器安装的:

# which node
/home/user/.nvm/versions/node/v11.6.0/bin/node

# which nodejs
/usr/bin/nodejs