Je travaille sur un projet nodejs pour l'école. Je n'ai pas pu installer bcrypt avec npm alors j'ai installé bcrypt-nodejs et le projet a bien fonctionné hier. Mais aujourd'hui, lorsque je fais une "application de nœud", 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 sous Linux ubuntu 10.04 LTS J'ai essayé de trouver une solution sur google sans succès ... Quelqu'un peut-il m'aider?
Réponses:
J'ai trouvé que bcrypt compilé sur OSX ne fonctionnera pas tout à fait sous Linux . En d'autres termes, si vous archivez le bcrypt compilé sur votre poste de travail OSX local et essayez d'exécuter l'application de nœud sur vos serveurs Linux, vous verrez l'erreur ci-dessus.
Solution:
npm install bcrypt
sous Linux, vérifiez cela, résolu.La meilleure façon de gérer cela est probablement d'exclure vos node_modules dans .gitignore ... et l'installation de npm à distance.
la source
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
pour tester.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Ce n'est pas une compilation croisée, mais plutôt des binaires pré-compilés. Node-gyp ne fait PAS de compilation croisée par défaut.Si vous exécutez à l'intérieur d'un conteneur docker comme je le suis, tout ce dont vous avez besoin est un .dockerignore avec 'node_modules' spécifié dedans.
Certaines bibliothèques doivent être compilées sur la machine hôte et vos modules peuvent donc être obsolètes.
la source
Mon problème concernait mon fichier docker-compose.yml, j'avais déjà node_modules dans mon .dockerignore mais j'avais également besoin d'ajouter le répertoire node_modules en tant que volume:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
la source
J'étais également confronté au même problème avec bcrypt v.1.0.3. Juste mis à jour vers la dernière version (3.0.1) et cela fonctionne correctement maintenant
Courir
la source
Assurez-vous d'abord que vous ne téléchargez pas les modules de nœuds et que vous exécutez npm install sur votre machine Linux elle-même, car l'installation de bcrypt peut varier en fonction de la plate-forme que vous utilisez. Vous pouvez consulter d'autres instructions d'installation pour d'autres plates-formes ci-dessous.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Si vous rencontrez d'autres problèmes, cela pourrait être lié à node-pre-gyp. Une dépendance de bcrypt.
Pour AWS Elastic Beanstalk Lors du déploiement sur Elastic Beanstalk exécutant Node 8.x, node-gyp n'a pas les autorisations suffisantes pour écrire dans le répertoire tmp. bcrypt ne s'installe pas et le déploiement de l'application échoue.
Une solution de contournement consiste à ajouter un fichier .npmrc à la racine de votre projet qui forcera node-gyp à s'exécuter en tant que root et permettra à l'installation de se terminer. Contenu du fichier pour .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6 unsafe-perm=true
Une autre alternative (peut-être la meilleure façon) est de créer un fichier .ebextensions avec du 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
Cela vous donnera un accès suffisant pour exécuter node-gyp
la source
Il existe un moyen simple qui m'a permis de résoudre ce problème:
1. Désinstaller bcrypt
2.- Installez à nouveau bcrypt
L'erreur se produit car 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
la source
Pour ceux qui déploient une application sur AWS Elastic Beanstalk et vont installer bcrypt sur le serveur, incluez dans un hook post-déploiement dans
.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
la source
Je sais que cela peut être un peu compliqué, mais c'est une solution. Ce que j'ai fait lorsque j'ai eu besoin de mettre en œuvre Bcrypt, c'est d'avoir démarré une instance Cloud 9. Pour ceux d'entre vous qui ne le savent pas, Cloud9 est un IDE AWS de base qui s'exécute sur une instance EC2. Depuis Cloud9, vous pouvez télécharger votre code sur l'ide en tant que fonction lambda. J'ai donc écrit la fonction sur Cloud9 et quand je l'ai téléchargée, le code fonctionnait.
la source