节点-使用NODE_MODULE_VERSION 51针对不同的Node.js版本进行编译


140

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

知道如何解决这个问题吗?


请标记正确的答案
Shanika Ediriweera

Answers:


118

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

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

7
不起作用 对我来说,问题出在zmq包上,重新构建或删除它并npm installing无济于事。总是一样的问题。
trusktr '18

6
@trusktr尝试完全删除node_modules文件夹:rm -rf node_modules。清除npm cache npm cache clear:,删除package-lock.json或npm-shrinkwrap.json。并且只有在那之后npm i
alexmac

1
得到了一个很好的信息,“我希望您知道自己在做什么。” 当我清除缓存时。我没有那么多,但显然您愿意!有效。
ouflak '18

你不/永远不需要npm cache clear,其他命令使它
caub

为我工作!我的确切错误是-“模块'/ Users / <用户名> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node'已使用NODE_MODULE_VERSION 64针对不同的Node.js版本进行了编译。”
通常

73

我有同样的问题,这里没有提到对我有用。这是对我有用的东西:

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

这是非常重要的运行./node_modules/.bin/electron-rebuild后直接npm i否则就没有我的Mac上运行。

我希望我能帮助一些沮丧的人。


2
仅仅进行电子重建对我来说就是工作。在我的情况下,无需删除和重新安装模块。
stoefln

1
好吧,很不幸,您很幸运@stoefln,在某些设置中一步一步地遵循这些确切的步骤至关重要。
chitzui

1
我在Windows上,但此解决方案也对我有用。您能解释造成此问题的原因吗?这可能是Electron的错误吗?
jbinvnt


如何仅通过管道或任何命令进行电子重建
Kirataka

57

您还必须重建软件包告诉npm也更新它的二进制文件。尝试:

npm rebuild bcrypt --update-binary

@robertklep用此命令回答了一个相对的问题,请看

只是重建还没有解决我的问题,这在我的应用程序中可以正常工作。

希望能帮助到你!


1
我以为重建的目的是更新二进制文件,您什么时候想在不更新二进制文件的情况下进行重建?
bobmoff

1
@bobmoff我在想只尝试使用相同方式进行尝试,文档说它们为我们更新了所有内容。但是只有错误-我的问题是将旧的工作本地存储库同步到新的本地NodeJS / NPM版本。因此,我环顾四周,“-update-binary”是告诉它真正强制执行并更改它与自然重建相关的方式。
RPichioli

30

只需运行:

npm uninstall bcrypt

其次是:

npm install bcrypt(或者npm install,如果bcryptpackage.json文件中声明为依赖项)


13

你可以看到这个链接

检查您的节点版本权限。使用NODE_MODULE_VERSION 51表示您的节点版本是nodejs v7.x,需要NODE_MODULE_VERSION 57意味着您需要将节点升级到v8.x,因此需要升级您的节点。然后需要运行npm rebuild命令来重建项目


3
没有链接,答案本身应该会有所帮助。
Tobias Wilfert

也有类似的问题,从67抱怨57.就我而言,我从降级11/stable8/stable$ snap refresh node --channel=8/stable在Ubuntu。在那之后$ npm rebuild
丹尼尔(Daniel)

这个答案是错误的。NODE_MODULE_VERSION 51表示该.node文件是使用NODE_MODULE_VERSION 51针对某个节点版本编译的。并且用户使用的节点版本是57,因此用户无法直接使用它。用户应重建编译。
Alsotang

11

由于package-lock.json,最有可能出现此问题。即使您显式运行,它似乎也以某种方式阻止您重新编译或重建依赖项npm rebuild。我执行以下所有操作来为我修复此问题:

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

10

确保您仅安装了一个版本的NodeJS。尝试以下两个:

node --version
sudo node --version

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


ah!我为什么没想到这个!感谢您的发帖,以便我可以面对面。
迷宫

3

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

我通过添加一个.dockerignore文件以忽略node_modules目录来解决此问题,以确保在构建docker映像时,它为所需的映像(Alpine)构建本地包,而不是复制为主机(Debian)编译的node_modules 。


为我工作...添加:node_modules/package-lock.json
Giovanne Afonso,

3

原来我的问题是用户错误:确保用于运行的节点版本与运行npm install或yarn时使用的版本相同。

我使用NVM进行版本控制节点,并通过终端运行yarn,但是我的IDE设置为在运行时使用较旧版本的节点,并且抛出上述错误。在运行配置中将我IDE的node版本与node --version匹配,可以解决此问题。


1

我对robotjs也有类似的问题。有一些不推荐使用的代码需要节点v11,但是我已经在v12上编译了电子代码。所以我基本上得到了相同的错误。由于我基本上是试图将电子和其他依赖项从v12重建到节点v11中,因此这里没有任何作用。

这是我所做的(部分工作是基于chitzui的回答,即应归功于功劳的功劳):

  • 备份package.json
  • 完全删除node_modules文件夹
  • 完全删除package_lock.json
  • 删除package.json(稍后会重新初始化)
  • 关闭项目目录中所有打开的编辑器和其他cmd窗口。
  • 运行npm init以重新初始化程序包,然后使用旧备份的package.json丢失数据
  • npm i
  • 固定的:)

希望这可以帮助。


1

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

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)


1

我删除了node_modules文件夹并运行npm install,我的应用程序启动没有任何错误。


0

使用systemd运行我的应用程序时出现此错误:

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

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

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

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




0

您可以完全删除bcrypt并安装bcryptjs。它慢了30%,但是没有依赖关系,因此安装起来很轻松。

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

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


0

导致问题的原因可能是节点JS版本不一致。如文档中所述。确保使用lts版本之一。例如,在您的Dockerfile中指定以下内容:

# Pull lts from docker registry
FROM node:8.12.0

# ...

0

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


0

我遇到了同样的问题,但是这些解决方案都没有用,我也不知道为什么,过去他们为我解决类似的问题。

无论如何要解决这个问题,我只是使用node-pre-gyp手动重建软件包

cd node_modules/bcrypt
node-pre-gyp rebuild

一切都按预期进行。

希望这可以帮助


0

我只是在运行kadence时遇到此错误,已安装的“ kadence”脚本会首先检查nodejs,并且仅在没有nodejs的情况下才运行node。我将最新版本的node链接到我的〜/ bin目录中,但是nodejs运行的是我忘记卸载的旧版本,但直到现在才引起问题。

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


0

就我而言,我在办公室代理中正在跳过某些软件包。当我走出办公室代理并试图做npm install使其工作时。也许这对某人有帮助。

但是花了我几个小时才确定这是原因。


0

就我而言,我nodejs不是在跑步node。由于nodejs由包管理器安装:

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

# which nodejs
/usr/bin/nodejs


0

您只需要在以下命令中运行此命令:

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

最后

$ ./node_modules/.bin/electron-rebuild

不要忘记yarn add electron-rebuild您的依赖项中不存在它。


0

我在一个电子应用程序中两次遇到此错误,结果发现问题是某些模块需要从主过程而不是渲染过程中使用。使用pdf2json和节点画布时发生错误。将需要这些模块的代码从index.htm(渲染过程)移动到main.js(主过程)可修复错误,并重新构建了应用程序并完美运行。这不能在所有情况下都解决问题,但是首先要检查您是否正在编写电子应用程序并遇到此错误。


0

这对我有用。我正在使用带有Electron Js的环回节点模块,并且遇到了这个问题。在尝试了许多事情之后,以下对我有用。

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

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

然后运行以下命令 npm run rebuild

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.