运行节点应用程序时bcrypt无效的elf标头

use*_*469 74 elf bcrypt node.js

我正在为学校开展一个nodejs项目.我无法用npm安装bcrypt所以我安装了bcrypt-nodejs并且该项目昨天工作正常.但今天,当我做"节点应用程序"时,我有这个错误:

/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79
        throw e
              ^
Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
    at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
Run Code Online (Sandbox Code Playgroud)

我的package.json文件如下所示:

{
  "name": "Supinfarm",
  "version": "0.0.0",
  "env": {
              "PYTHON": "/usr/bin/python2.6"
        },
  "dependencies": {
    "express": "3.1.0",
    "connect-flash": "*",
    "jade": "*",
    "stylus": "*",
    "passport": "*",
    "passport-local": "*",
    "mongoose": "*",
    "bcrypt": "*"
  }
}
Run Code Online (Sandbox Code Playgroud)

我在Linux上ubuntu 10.04 LTS我试图在google上找到解决方案但没有成功......有人可以帮助我吗?

Cma*_*mag 145

我发现在OSX上编译的bcrypt在Linux上不太适用.换句话说,如果您检查在本地OSX工作站上编译的bcrypt,并尝试在Linux服务器上运行节点应用程序,您将看到上面的错误.

解决方案:npm install bcrypt在Linux上,检查一下,解决了.

处理此问题的最佳方法可能是排除.gitignore中的node_modules ...以及远程安装npm.

  • 那是因为它们是不同的操作系统,而且很可能是不同的底层处理器架构。当我在大学时,我们有两个 UNIX 集群:一个在 VAX 上运行,另一个在 Alpha 上运行。CS 项目必须在 VAX 上编译,因为那是教授使用的...... (3认同)
  • @mikemaccana node-sass仅能起作用,因为(来自readme.md):`Node-sass包括针对流行平台的预编译二进制文件,要为您的平台添加二进制文件,请遵循以下步骤:它不是交叉编译,而是为您提供了预编译的二进制文件。默认情况下,Node-gyp不会交叉编译。 (2认同)

Tac*_*ter 20

如果您像我一样在 docker 容器中运行,那么您只需要一个 .dockerignore 并在其中指定了“node_modules”。

某些库需要在主机上编译,因此您的模块可能已经过时。

  • 这是我的问题。bcrypt 是在 MacOS X 上构建的,但在 Linux 容器中运行。 (3认同)
  • 真的很感谢你,这让我很头疼。 (3认同)

Swe*_*hmi 15

我遇到了同样的问题。我使用 Windows 在 AWS Lambda 中通过代码进行部署。我遇到了同样的错误。我使用“bcryptjs”npm 库修复了它。

npm install bcryptjs


小智 13

我的问题是我的 docker-compose.yml 文件,我的 .dockerignore 中已经有 node_modules 但我还需要将 node_modules 目录添加为一个卷:

volumes:
  - ./:/usr/src/app
  - /usr/src/app/node_modules

Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么,但只有这个解决方案对我有用!谢谢! (2认同)

小智 8

将包更改为:

npm install bcryptjs
Run Code Online (Sandbox Code Playgroud)
var bcrypt = require('bcryptjs');
Run Code Online (Sandbox Code Playgroud)

功能是一样的。

在此处获取更多信息https://github.com/dcodeIO/bcrypt.js


小智 7

我也遇到了 bcrypt v.1.0.3 的同样问题。刚刚更新到最新版本(3.0.1),现在工作正常

npm install bcrypt@latest --save
Run Code Online (Sandbox Code Playgroud)

  • 这在 MacOS 中对我不起作用(我使用的是 v3.0.4) (2认同)

cra*_*mer 6

有一种简单的方法可以让我解决这个问题:

1.卸载bcrypt

npm uninstall bcrypt
Run Code Online (Sandbox Code Playgroud)

2.- 再次安装 bcrypt

 npm i bcrypt
Run Code Online (Sandbox Code Playgroud)

出现这个错误是因为当你安装bcypt时,npm会为你的机器和操作系统安装推荐的版本,但是当你在另一台机器上时,这不起作用。

--------更新----------------------------------------

在我看来,另一个解决方案是向 bcrypt 安装授予 root 权限,这是因为 bcryp 使用自己的用户但它没有权限,所以:

1. 您必须授予项目文件夹的 root 权限。走出你的项目文件夹,然后

sudo su
Run Code Online (Sandbox Code Playgroud)

然后输入您的root密码以获取root用户权限

2. 授予对您的项目文件夹的权限

chmod -R 777 <project_folder>
Run Code Online (Sandbox Code Playgroud)

3. 进入你的项目文件夹并安装 bcrypt

cd <project_folder>
Run Code Online (Sandbox Code Playgroud)

npm i bcrypt --unsafe-perm=true --allow-root --save
Run Code Online (Sandbox Code Playgroud)

准备好,如果一切正常,您的 bcrypt 模块将毫无问题地安装。