Ich arbeite an einem NodeJS-Projekt für die Schule. Ich konnte bcrypt nicht mit npm installieren, also habe ich bcrypt-nodejs installiert und das Projekt hat gestern gut funktioniert. Aber heute, wenn ich eine "Node App" mache, habe ich diesen Fehler:
/.../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)
Meine package.json-Datei sieht folgendermaßen aus:
{
"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": "*"
}
}
Ich bin unter Linux Ubuntu 10.04 LTS Ich habe erfolglos versucht, eine Lösung auf Google zu finden ... Kann mir jemand helfen?
Antworten:
Ich habe festgestellt, dass unter OSX kompiliertes bcrypt unter Linux nicht ganz funktioniert . Mit anderen Worten, wenn Sie die auf Ihrer lokalen OSX-Workstation kompilierte bcrypt einchecken und versuchen, die Knoten-App auf Ihren Linux-Servern auszuführen, wird der obige Fehler angezeigt.
Lösung: Unter
npm install bcrypt
Linux einchecken, gelöst.Der wahrscheinlich beste Weg, um damit umzugehen, besteht darin, Ihre node_modules in .gitignore auszuschließen ... und npm remote zu installieren.
quelle
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
zu testen.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Es handelt sich nicht um eine Cross-Kompilierung, sondern um vorkompilierte Binärdateien. Node-gyp wird standardmäßig NICHT crosskompiliert.Wenn Sie wie ich in einem Docker-Container ausgeführt werden, benötigen Sie lediglich einen .dockerignore mit den darin angegebenen 'node_modules'.
Einige Bibliotheken müssen auf dem Hostcomputer kompiliert werden, daher können Ihre Module veraltet sein.
quelle
Ich hatte auch das gleiche Problem mit bcrypt v.1.0.3. Gerade auf die neueste Version (3.0.1) aktualisiert und funktioniert jetzt einwandfrei
Lauf
quelle
Mein Problem war mit meiner Datei docker-compose.yml. Ich hatte bereits node_modules in meinem .dockerignore, aber ich musste auch das Verzeichnis node_modules als Volume hinzufügen:
quelle
Stellen Sie zunächst sicher, dass Sie die Knotenmodule nicht hochladen und npm install auf Ihrem Linux-Computer selbst ausführen, da die bcrypt-Installation je nach verwendeter Plattform variieren kann. Weitere Installationsanweisungen für andere Plattformen finden Sie weiter unten.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Wenn Sie weitere Probleme haben, kann dies mit Node-Pre-Gyp zusammenhängen. Eine Abhängigkeit von bcrypt.
Für AWS Elastic Beanstalk Bei der Bereitstellung auf Elastic Beanstalk unter Node 8.x verfügt Node-Gyp nicht über ausreichende Berechtigungen zum Schreiben in das tmp-Verzeichnis. bcrypt wird nicht installiert und die Anwendungsbereitstellung schlägt fehl.
Eine Problemumgehung besteht darin, dem Stammverzeichnis Ihres Projekts eine .npmrc-Datei hinzuzufügen, die die Ausführung von node-gyp als root erzwingt und den Abschluss der Installation ermöglicht. Dateiinhalt für .npmrc:
Eine andere Alternative (vielleicht der richtigere Weg) besteht darin, eine .ebextensions-Datei mit Code zu erstellen:
Dadurch erhalten Sie ausreichend Zugriff, um Node-Gyp auszuführen
quelle
Wenn Sie eine App für AWS Elastic Beanstalk bereitstellen und bcrypt auf dem Server installieren möchten, fügen Sie in einen Post-Deployment-Hook Folgendes ein
.ebextensions/01_build.config
:quelle
Es gibt einen einfachen Weg, mit dem ich dieses Problem lösen konnte:
1. Deinstallieren Sie bcrypt
2.- Installieren Sie bcrypt erneut
Der Fehler tritt auf, weil npm bei der Installation von bcypt die empfohlene Version für Ihren Computer und Ihr Betriebssystem installiert. Wenn Sie sich jedoch auf einem anderen Computer befinden, funktioniert dies nicht
quelle
Ich weiß, dass dies ein bisschen mühsam sein könnte, aber es ist eine Lösung. Als ich Bcrypt implementieren musste, habe ich eine Cloud 9-Instanz gestartet. Für diejenigen unter Ihnen, die es nicht wissen, ist Cloud9 eine grundlegende AWS-IDE, die auf einer EC2-Instanz ausgeführt wird. Über Cloud9 können Sie Ihren Code als Lambda-Funktion auf die ide hochladen. Also habe ich die Funktion auf Cloud9 geschrieben und als ich sie hochgeladen habe, hat der Code funktioniert.
quelle