Estoy trabajando en un proyecto de nodejs para la escuela. No pude instalar bcrypt con npm, así que instalé bcrypt-nodejs y el proyecto funcionó bien ayer. Pero hoy, cuando hago una "aplicación de nodo", tengo este error:
/.../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)
mi archivo package.json se ve así:
{
"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": "*"
}
}
Estoy en Linux ubuntu 10.04 LTS He tratado de encontrar una solución en Google sin éxito ... ¿Alguien puede ayudarme?
Respuestas:
Descubrí que bcrypt compilado en OSX no funciona del todo en Linux . En otras palabras, si verifica el bcrypt compilado en su estación de trabajo OSX local e intenta ejecutar la aplicación de nodo en sus servidores Linux, verá el error anterior.
Solución:
npm install bcrypt
en Linux, verifique eso, resuelto.Probablemente la mejor manera de lidiar con esto es excluir sus node_modules en .gitignore ... y npm instalar de forma remota.
fuente
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
para probar.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. No es una compilación cruzada, sino que le brinda binarios precompilados. Node-gyp NO realiza una compilación cruzada de forma predeterminada.Si está ejecutando dentro de un contenedor docker como yo, todo lo que necesita es un .dockerignore con 'node_modules' especificado en él.
Algunas bibliotecas deben compilarse en la máquina host y, por lo tanto, sus módulos pueden quedar obsoletos.
fuente
Mi problema fue con mi archivo docker-compose.yml, ya tenía node_modules en mi .dockerignore pero también necesitaba agregar el directorio node_modules como un volumen:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
fuente
También me enfrentaba al mismo problema con bcrypt v.1.0.3. Recién actualizado a la última versión (3.0.1) y ahora funciona bien
correr
fuente
Primero asegúrese de que no está cargando los módulos de nodo y está ejecutando npm install en su propia máquina Linux, ya que la instalación de bcrypt puede variar según la plataforma que utilice. Puede consultar otras instrucciones de instalación para otras plataformas a continuación.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Si tiene más problemas, podría estar relacionado con node-pre-gyp. Una dependencia de bcrypt.
Para AWS Elastic Beanstalk Cuando se implementa en Elastic Beanstalk con Node 8.x, node-gyp no tiene permisos suficientes para escribir en el directorio tmp. bcrypt no se instalará y la implementación de la aplicación fallará.
Una solución alternativa es agregar un archivo .npmrc a la raíz de su proyecto que forzará a node-gyp a ejecutarse como root y permitirá que se complete la instalación. Contenido del archivo para .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6 unsafe-perm=true
Otra alternativa (quizás la forma más correcta) es hacer un archivo .ebextensions con código:
.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
Esto le dará suficiente acceso para ejecutar node-gyp
fuente
Hay una forma sencilla que me permitió resolver este problema:
1. Desinstale bcrypt
2.- Instala bcrypt nuevamente
El error se produce porque cuando instala bcypt, npm instala la versión recomendada para su máquina y sistema operativo, pero cuando está en otra máquina, esto no funciona
fuente
Para aquellos que implementan una aplicación en AWS elastic beanstalk y van a instalar bcrypt en el servidor, incluya en un enlace posterior a la implementación en
.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
fuente
Sé que esto puede ser un poco complicado, pero es una solución. Lo que hice cuando necesitaba implementar Bcrypt fue iniciar una instancia de Cloud 9. Para aquellos de ustedes que no lo saben, Cloud9 es un AWS IDE básico que se ejecuta en una instancia EC2. Desde Cloud9 puede cargar su código en el ide como una función lambda. Así que escribí la función en Cloud9 y cuando la cargué, el código funcionó.
fuente