Node -使用NODE_MODULE_VERSION 51根据不同的Node.js版本编译

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

知道怎么解决吗?

230263 次浏览

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

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

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

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

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

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

如果这是您的设置,您可以在服务文件中硬编码节点版本,或者遵循类似这一个的解决方案。

简单地运行:

npm uninstall bcrypt

紧随其后的是:

npm install bcrypt(或npm install,如果bcrypt在你的package.json文件中被声明为依赖项)

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

npm rebuild bcrypt --update-binary

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

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

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

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

在尝试不同的东西之后。 这工作。< / p >

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

npm i

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

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

我在grpc模块中遇到了同样的问题,在我的情况下,我正在使用电子,并在env变量“export npm_config_target=1.2.3”中设置了错误的电子版本,将其设置为我正在使用的电子版本,解决了我的问题。希望这能帮助那些设置env变量的人(https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way)

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

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

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

确保你只安装了一个版本的NodeJS。试试这两个:

node --version
sudo node --version

我最初从源代码安装NodeJS,但它是不正确的版本,并使用nvm“升级”到最新版本,它不会删除任何以前的版本,只在/root/.nvm/versions/...目录中安装所需的版本。所以sudo node仍然指向以前的版本,而node指向更新的版本。

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

# Pull lts from docker registry
FROM node:8.12.0


# ...

我也有同样的问题,这里提到的没有什么对我有用。 以下是对我有效的方法:

  1. 要求在由electron运行的main.js文件中需要的所有依赖项。(这对我来说似乎是第一个重要的部分)
  2. 运行npm i -D electron-rebuild添加electron-rebuild
  3. 删除node-modules文件夹,以及packages-lock.json文件。
  4. 运行npm i来安装所有模块。
  5. 运行./node_modules/.bin/electron-rebuild (Windows为.\node_modules\.bin\electron-rebuild.cmd)来重新构建所有内容

npm i之后直接运行./node_modules/.bin/electron-rebuild非常重要的,否则它在我的mac上不起作用。

检查您正在使用的Node版本,可能与预期的不匹配。

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

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

cd node_modules/bcrypt
node-pre-gyp rebuild

一切都按照预期进行。

希望这能有所帮助

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

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

你可以看到这个链接

检查节点版本是否正确。使用 NODE_MODULE_VERSION 51表示节点版本为nodejs v7。NODE_MODULE_VERSION 57意味着您需要将节点升级到v8。X,你需要升级你的节点。然后你需要运行npm rebuild命令来重建你的项目

在我的情况下,我在我的办公室代理跳过了一些包裹。当我从我的办公室代理出来,并试图做npm install它工作了。也许这对某些人有帮助。

但我花了好几个小时才确定是什么原因。

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

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


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

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

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

运行npm config set python python2.7,再运行npm install,派对开始了。

结果我的问题是用户错误:确保你正在运行的节点版本与你在运行npm install或yarn时使用的是相同的。

我使用NVM对节点进行版本控制,并通过终端运行yarn,但我的IDE在运行时设置为使用旧版本的节点,并抛出上面的错误。在运行配置中匹配我的IDE的节点版本到node——version修复了这个问题。

你只需要运行下面的命令:

$ rm -rf node_modules
$ rm -rf yarn.lock
$ yarn install

最后

$ ./node_modules/.bin/electron-rebuild

如果你的依赖项中不存在yarn add electron-rebuild,不要忘记yarn add electron-rebuild

我在电子应用程序中两次碰到这个错误,结果发现问题是一些模块需要从主进程中使用,而不是渲染过程。使用pdf2json和node-canvas时发生错误。将需要这些模块的代码从index.htm(渲染进程)移动到main.js(主进程)修复了错误,应用程序重新构建并完美地运行。这不会在所有情况下解决问题,但它是第一件事,以检查你是否正在编写电子应用程序,并遇到这个错误。

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

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_modules文件夹并运行npm install,我的应用程序启动时没有任何错误。

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

在你的package.json文件的脚本中添加以下行:

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

},
...

然后运行下面的命令npm run rebuild

我来这里是因为我在vscode中得到这个关于quokka.js ext的错误。

< p >我的解决方案: (在MAC上通过终端)

1-我去了~/.quokka

2-我运行nano config.json

3-我从配置中复制了代码。Json放到一个单独的文件中

4-我删除了config.json中的代码

5-我停下来,重新启动短尾矮袋鼠。

6-一旦我确认短尾矮袋鼠工作没有错误,我删除配置。Json文件代码。

这是因为你当前改变了你的node js版本, 只需在项目的终端中运行

$ rm -rf node_modules/bcrypt

然后重新安装

$ npm install

你可以开始了。好吧