当运行节点应用程序时 bcrypt 无效的精灵头

我在为学校做一个 Nodejs 项目。 I wasn't able to install bcrypt with npm so i installed bcrypt-nodejs and the project worked fine yesterday. 但是今天,当我做一个“节点应用程序”我有这个错误:

/.../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)

my package.json file looks like this:

{
"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": "*"
}
}

我在 Linux ubuntu 10.04 LTS 上 我试图在谷歌上找到一个解决方案,但没有成功。 有人能帮帮我吗?

101930 次浏览

我找到那个 在 OSX 上编译的 bcrypt 将不能在 Linux 上工作了。换句话说,如果您检入在本地 OSX 工作站上编译的 bcrypt,并尝试在 Linux 服务器上运行节点应用程序,您将看到上面的错误。

Solution: npm install bcrypt on Linux, check that in, solved.

Probably the best way to deal with this is exclude your node_modules in .gitignore... and npm install remotely.

I was also facing the same issue with bcrypt v.1.0.3. 刚刚更新到最新版本(3.0.1) ,现在工作正常

快跑

npm install bcrypt@latest --save

对于那些将一个应用程序部署到 AWS 的弹性 bean 跟踪,并打算在服务器上安装 bcrypt 的人来说,在 .ebextensions/01_build.config的后期部署钩子中包括:

files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
cd /var/app/current/
rm -rf node_modules/bcrypt
sudo /opt/elasticbeanstalk/node-install/node-v10.13.0-linux-x64/bin/npm install bcrypt@latest

如果您像我一样在一个码头容器中运行,那么您所需要的只是一个。指定了‘ node _ module’的 dockerignore。

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

我的问题是我的码头作品。在 yml 文件中,我已经在。但是我还需要添加 node _ module 目录作为卷:

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


首先确保您没有上传节点模块,并且正在 Linux 机器上运行 npm install,因为 bcrypt 的安装可能因所使用的平台而异。您可以在下面查看其他平台的其他安装说明。
Https://github.com/kelektiv/node.bcrypt.js/wiki/installation-instructions

如果您有进一步的问题,它可能与 node-pre-gyp 有关。

For AWS Elastic Beanstalk 当部署到运行 Node 8.x 的 Elastic Bean}时,Node-gyp 没有足够的权限写入 tmp 目录。Bcrypt 不会安装,应用程序部署将失败。

变通方法是添加一个。将 npmrc 文件发送到项目的根目录,这将强制 node-gyp 作为根目录运行并允许完成安装。文件内容。新机场核心计划:

# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true

Another alternative (Perhaps the more right way) is to make .ebextensions file with code:

.ebextensions:00_change_npm_permissions.config:
"/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
chown -R nodejs:nodejs /tmp/.npm

这将为您提供足够的访问权限来运行 node-gyp

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

1. Uninstall bcrypt

npm uninstall bcrypt

2.-再次安装 bcrypt

 npm i bcrypt

发生此错误是因为当您安装 bcypt 时,npm 会为您的机器和操作系统安装推荐的版本,但是当您在另一台机器上时,这种方法不起作用。

———— 更新————————————

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

你必须授予你的项目文件夹根权限。走出你的项目文件夹,然后

sudo su

然后输入 root 用户密码以获得 root 用户权限

2. Grant permission to your project folder

chmod -R 777 <project_folder>

3. Go to your project folder and install bcrypt

cd <project_folder>

还有

npm i bcrypt --unsafe-perm=true --allow-root --save

准备,如果一切正常,您的 bcrypt 模块将安装没有问题。

我知道这可能有点麻烦,但这是一个解决方案。当我需要实现 Bcrypt 时,我所做的就是启动一个 Cloud9实例。对于那些不知道的人来说,Cloud9是一个基本的 AWS IDE,运行在 EC2实例上。从 Cloud9中,您可以将代码作为 lambda 函数上传到 ide 中。所以我在 Cloud9上编写了这个函数,当我上传它时,代码工作了。

如果你在 Docker 我解决了这个问题,登录到运行我的服务和运行 npm uninstall bcrypt然后 npm install bcrypt的匹配

改变方案:

npm install bcryptjs
var bcrypt = require('bcryptjs');

The functions are the same.

Get more information here https://github.com/dcodeIO/bcrypt.js

我也遇到了同样的问题。我使用 Windows 通过代码在 AWS Lambda 中部署。我也犯了同样的错误。我使用‘ bcryptjs’npm 库修复了它。

npm install bcryptjs

我通常在 Docker 中使用 macOS,为了添加一些软件包,我首先进入 Docker 服务器 docker exec -it nameServer /bin/bash,然后添加软件包 npm install bcrypt,例如。所以我保证一切都会在生产服务器上运行

在我的例子中,我使用的是 在窗户上,当我使用 docker (linux)时,我得到了这个错误,将 。多克忽略文件与文件夹 node _ module 一起添加,这样我就可以正确工作了,windows 中的 nodejs 软件包加载 不一样,所以最好在 linux 中从头安装它们。

为 Docker 容器解决此问题。

You can create a .dockerignore with this configuration :

node_modules/
dist/