106 votes

bcrypt invalid elf header when running node app

Je travaille sur un projet nodejs pour l'école. Je n'ai pas pu installer bcrypt avec npm donc j'ai installé bcrypt-nodejs et le projet a bien fonctionné hier. Mais aujourd'hui, quand je fais un "node app" j'ai cette erreur :

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

mon fichier package.json ressemble à ceci :

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

Je suis sur Linux ubuntu 10.04 LTS J'ai essayé de trouver une solution sur google sans succès... Quelqu'un peut-il m'aider ?

183voto

Cmag Points 970

J'ai découvert que bcrypt compilé sur OSX ne fonctionnera pas tout à fait sur Linux . En d'autres termes, si vous enregistrez le bcrypt compilé sur votre station de travail OSX locale, et essayez d'exécuter l'application node sur vos serveurs linux, vous verrez l'erreur ci-dessus.

Solution : npm install bcrypt sur Linux, vérifiez ça, résolu.

La meilleure façon de gérer ce problème est probablement d'exclure vos node_modules dans .gitignore... et d'installer npm à distance.

27voto

MonkeyFish Points 612

Si vous travaillez dans un conteneur docker comme moi, tout ce dont vous avez besoin est un .dockerignore avec 'node_modules' spécifié.

Certaines bibliothèques doivent être compilées sur la machine hôte et vos modules peuvent donc être périmés.

21voto

Nick M Points 1

Mon problème se situait au niveau de mon fichier docker-compose.yml, j'avais déjà node_modules dans mon .dockerignore mais je devais également ajouter le répertoire node_modules en tant que volume :

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

12voto

crazyProgrammer Points 59

Il existe un moyen simple qui m'a permis de résoudre ce problème :

1. Désinstaller bcrypt

npm uninstall bcrypt

2.- Installer à nouveau bcrypt

 npm i bcrypt

L'erreur se produit parce que lorsque vous installez bcypt, npm installe la version recommandée pour votre machine et votre système d'exploitation, mais lorsque vous êtes sur une autre machine, cela ne fonctionne pas.

-------- UPDATE ----------------------------------------

Il me semble aussi qu'une autre solution qui est d'accorder les permissions Root à l'installation de bcrypt, cela arrive parce que bcryp utilise son propre utilisateur mais il n'a pas de permissions, donc :

1. Vous devez accorder la permission Root à votre dossier de projet. allez en dehors de votre dossier de projet et puis

sudo su

Ensuite, entrez votre mot de passe Root pour obtenir les droits d'utilisateur Root.

2. Accordez la permission au dossier de votre projet

chmod -R 777 <project_folder>

3. Allez dans le dossier de votre projet et installez bcrypt

cd <project_folder>

ET

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

Prêt, si tout était OK, votre module bcrypt s'installera sans problèmes.

9voto

rushabh_trivedi Points 99

J'étais également confronté au même problème avec bcrypt v.1.0.3. Je viens de passer à la dernière version (3.0.1) et cela fonctionne bien maintenant.

Exécuter

npm install bcrypt@latest --save

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X