我正在为学校开展一个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)
我的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": "*"
}
}
我在Linux上使用ubuntu 10.04 LTS 我试图在谷歌上找到一个没有成功的解决方案...... 有人可以帮帮我吗?
答案 0 :(得分:132)
我发现在OSX上编译的 bcrypt在Linux上不能正常工作。换句话说,如果您检查在本地OSX工作站上编译的bcrypt,并尝试在Linux服务器上运行节点应用程序,您将看到上面的错误。
解决方案:Linux上的npm install bcrypt
,检查一下,解决了。
处理此问题的最佳方法可能是排除.gitignore中的node_modules ...以及远程安装npm。
答案 1 :(得分:7)
我的问题是我的docker-compose.yml文件,我的.dockerignore中已经有node_modules了,但是我还需要将node_modules目录添加为一个卷:
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
答案 2 :(得分:4)
我也遇到了与bcrypt 1.0.3版相同的问题。 刚刚更新到最新版本(3.0.1),现在可以正常使用
运行
void Problem::SetParameterBlockConstant(double *values)
答案 3 :(得分:1)
如果您像我一样在docker容器中运行,则只需要在其中指定'node_modules'的.dockerignore。
某些库需要在主机上编译,因此您的模块可能陈旧。
答案 4 :(得分:1)
首先请确保您没有上载节点模块,并且正在Linux机器上运行npm install,因为bcrypt安装可能会因所使用的平台而异。您可以在下面查看其他平台的其他安装说明。
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
如果您还有其他问题,则可能与node-pre-gyp有关。 bcrypt的依赖项。
对于AWS Elastic Beanstalk 部署到运行Node 8.x的Elastic Beanstalk时,node-gyp没有足够的权限写入tmp目录。 bcrypt无法安装,并且应用程序部署将失败。
一种解决方法是将.npmrc文件添加到项目的根目录,这将强制node-gyp以root身份运行并允许安装完成。 .npmrc的文件内容:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true
另一种替代方法(也许是更正确的方法)是使用以下代码制作.ebextensions文件:
.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
答案 5 :(得分:1)
有一种简单的方法可以解决此问题:
1。卸载bcrypt
npm uninstall bcrypt
2.-重新安装bcrypt
npm i bcrypt
发生错误是因为,当您安装bcypt时,npm会为您的计算机和操作系统安装推荐的版本,但是当您在另一台计算机上时,则不起作用
答案 6 :(得分:1)
如果您使用的是 Docker,我会通过登录到运行我的服务的机器并运行 npm uninstall bcrypt
然后 npm install bcrypt
答案 7 :(得分:0)
对于那些将应用程序部署到AWS Elastic Beanstalk并要在服务器上安装bcrypt的用户,请在.ebextensions/01_build.config
中的post post挂钩中添加
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
答案 8 :(得分:0)
我知道这可能有点麻烦,但这是一个解决方案。当我需要实现Bcrypt时,我要做的就是启动一个Cloud 9实例。对于不认识的人,Cloud9是运行在EC2实例上的基本AWS IDE。从Cloud9,您可以将代码作为Lambda函数上传到ide上。因此,我在Cloud9上编写了该函数,并在上载该代码后起作用。
答案 9 :(得分:0)
将包更改为:
struct UnBrokenView: View {
@StateObject var model = Observable(Model()) // wrap in Observable
var body: some View {
Text(model.number)
Button("Change") {
model.number = ["One", "Two", "Three", "Four", "Five", "Six"].randomElement()!
}
}
}
npm install bcryptjs
功能相同。
在此处获取更多信息flush=True
答案 10 :(得分:0)
我遇到了同样的问题。我使用 Windows 在 AWS Lambda 中通过代码部署。我得到了同样的错误。我使用'bcryptjs' npm 库修复了它。
npm install bcryptjs
答案 11 :(得分:-1)
我通常将 macOS 与 Docker 一起使用,例如要添加一些包,我首先进入 Docker 服务器 docker exec -it nameServer /bin/bash
然后添加包 npm install bcrypt
。所以我保证一切都会在生产服务器上运行