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

时间:2017-09-23 21:50:41

标签: node.js npm version node-modules

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

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

29 个答案:

答案 0 :(得分:63)

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

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

答案 1 :(得分:34)

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

npm rebuild bcrypt --update-binary

@robertklep用这个命令look回答了一个相对的问题。

只有重建天堂才能解决我的问题,这在我的应用程序中运行良好。

希望它有所帮助!

答案 2 :(得分:25)

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

  1. 在由电子运行的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重建所有内容

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

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

答案 3 :(得分:14)

简单地运行:

npm uninstall bcrypt

其次是:

npm install bcrypt(或npm install,如果 bcrypt package.json 文件中声明为依赖关系

答案 4 :(得分:10)

由于package-lock.json,您很可能遇到此问题。它会以某种方式阻止您重新编译或重建依赖项,即使您明确运行npm rebuild也是如此。我运行以下所有内容为我修复它:

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

答案 5 :(得分:7)

您可以看到此link

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

答案 6 :(得分:4)

npm rebuild bcrypt --update-binary

我有相同的问题,但是包不同,我运行此代码并对其进行处理

答案 7 :(得分:3)

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

node --version
sudo node --version

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

答案 8 :(得分:3)

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

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

答案 9 :(得分:3)

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

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

答案 10 :(得分:2)

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

答案 11 :(得分:1)

对于Electron模块,请安装electronic-rebuild。

import tensorflow as tf
import keras
#from keras.models import load_model
from keras.models import load_model
import argparse
import pickle
import cv2
import os
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
f = open("simple_multiclass_classifcation_lb.pickle", "wb")
f.write(pickle.dumps(lb))
f.close()

test_image_path = r"E:\classification\test\test\pan26.jpg"

model_path = r"PanModel.model.h5"

label_binarizer_path = "E:\API\simple_multiclass_classifcation_lb.pickle"

image = cv2.imread(test_image_path)
output = image.copy()
image = cv2.resize(image, (32,32))

 #scale the pixel values to [0, 1]
image = image.astype("float") / 255.0
image = image.flatten()
print ("image after flattening",len(image))
image = image.reshape((1, image.shape[0]))
print ("image--reshape",image.shape)

# load the model and label binarizer
print("[INFO] loading network and label binarizer...")
model = tf.keras.models.load_model('PanModel.model.h5')
#model = load_model("PanModel.model.h5")
lb = pickle.loads(open(label_binarizer_path, "rb").read())

# make a prediction on the image
print (image.shape)
preds = model.predict(image)

# find the class label index with the largest corresponding
# probability
print ("preds.argmax(axis=1)",preds.argmax(axis=1))
i = preds.argmax(axis=1)[0]
print (i)
label = lb.classes_[i]
# draw the class label + probability on the output image
text = "{}: {:.2f}%".format(label, preds[0][i] * 100)
cv2.putText(output, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

# show the output image
cv2.imshow("Image", output)
cv2.waitKey(0)

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

您可能会遇到这样的经验,即标准的node-gyp构建将报告为64,然后基本的电子重建将报告为76,直到您添加具有确切版本的-v并将其更改为实际版本80(对于9.0.0) -beta.6)

答案 12 :(得分:1)

这对我有用。我在Electron Js中使用 looped-back 节点模块,并遇到了这个问题。在尝试了许多事情之后,以下对我有用。

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

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

然后运行以下命令npm run rebuild

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

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

最后

$ ./node_modules/.bin/electron-rebuild

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

答案 16 :(得分:0)

运行npm config set python python2.7,然后再次运行npm install,聚会开始。

答案 17 :(得分:0)

他们都没有为我工作,但这是

npm install 
npm start

答案 18 :(得分:0)

我来到这里是因为我在 vscode 中遇到了 quokka.js ext 的错误。

我的解决方案: (在 Mac 上通过终端)

1- 我去了 ~/.quokka

2- 我跑了 nano config.json

3- 我将 config.json 中的代码复制到一个单独的文件中

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

5- 我停止并重新启动 Quokka。

6- 一旦我确认 Quokka 工作没有错误,我就删除了 config.json 文件代码。

答案 19 :(得分:0)

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

这就是我所做的事情(部分原因是基于chitzui的回答,即应归功的信用):

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

希望这会有所帮助。

答案 20 :(得分:0)

就我而言,我运行的是// in kotlin Glide.with(context) .load("url") //using apply to RequestOptions instead signature directly .apply(RequestOptions().signature(ObjectKey("time that image was updated"))) .into(thumb) 而不是nodejs。由于node由软件包管理器安装:

nodejs

答案 21 :(得分:0)

就我而言,我在办公室代理中正在跳过某些软件包。当我走出办公室代理并尝试做Parent3时,它起作用了。也许这对某人有帮助。

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

答案 22 :(得分:0)

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

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

cd node_modules/bcrypt
node-pre-gyp rebuild

一切都按预期进行。

希望这会有所帮助

答案 23 :(得分:0)

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

答案 24 :(得分:0)

可能是导致问题的原因是节点JS版本不一致。 As stated in the documentation。确保使用lts版本之一。例如。在您的Dockerfile中指定它:

# Pull lts from docker registry
FROM node:8.12.0

# ...

答案 25 :(得分:0)

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

 <Button
                    title="Go to Details"
                    onPress={() => this.props.navigation.navigate('Second', {
                        name: 'John',
                        age: 12,
                    })}
                    // onPress={gotoSecondButton}

gotoSecondButton = () => {
    this.props.navigation.navigate('Second', {
        name: 'John',
        age: 12,
    })
}

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

答案 26 :(得分:0)

我遇到了与grpc模块相同的问题,在我的情况下,我使用的是电子,并且在env变量“ export npm_config_target = 1.2.3”中设置了错误的电子版本,将其设置为我正在使用的电子版本这个问题在我身上。希望这对设置环境变量(https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way)的人有所帮助

答案 27 :(得分:0)

尝试不同的事情后。 这很有用。

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

npm i

答案 28 :(得分:0)

使用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

如果这是您的设置,您可以在服务文件中对节点版本进行硬编码,也可以按照this one之类的解决方法进行操作。