Estou trabalhando em um projeto nodejs para a escola. Não consegui instalar o bcrypt com o npm, então instalei o bcrypt-nodejs e o projeto funcionou bem ontem. Mas hoje, quando faço um "aplicativo de nó", recebo este erro:
/.../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)
meu arquivo package.json tem a seguinte aparência:
{
"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": "*"
}
}
Estou no Linux ubuntu 10.04 LTS Tentei encontrar uma solução no google sem sucesso ... Alguém pode me ajudar?
Respostas:
Descobri que o bcrypt compilado no OSX não funciona bem no Linux . Em outras palavras, se você verificar o bcrypt compilado em sua estação de trabalho OSX local e tentar executar o aplicativo de nó em seus servidores linux, verá o erro acima.
Solução:
npm install bcrypt
no Linux, verifique isso, resolvido.Provavelmente, a melhor maneira de lidar com isso é excluir seus node_modules em .gitignore ... e npm instalar remotamente.
fonte
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
para testar.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Não é uma compilação cruzada, mas sim binários pré-compilados. O Node-gyp NÃO faz compilação cruzada por padrão.Se você estiver executando dentro de um contêiner docker como eu, tudo o que você precisa é um .dockerignore com 'node_modules' especificado nele.
Algumas bibliotecas precisam ser compiladas na máquina host e, portanto, seus módulos podem estar desatualizados.
fonte
Meu problema era com meu arquivo docker-compose.yml, eu já tinha node_modules em meu .dockerignore, mas também precisava adicionar o diretório node_modules como um volume:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
fonte
Eu também estava enfrentando o mesmo problema com o bcrypt v.1.0.3. Acabei de atualizar para a versão mais recente (3.0.1) e está funcionando bem agora
Corre
fonte
Primeiro, certifique-se de não estar fazendo upload dos módulos de nó e de estar executando o npm install em sua máquina Linux, pois a instalação do bcrypt pode variar dependendo da plataforma que você usa. Você pode ver outras instruções de instalação para outras plataformas abaixo.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Se você estiver tendo mais problemas, pode estar relacionado ao node-pre-gyp. Uma dependência de bcrypt.
Para AWS Elastic Beanstalk Ao implantar no Elastic Beanstalk executando o Node 8.x, o node-gyp não tem permissões suficientes para gravar no diretório tmp. bcrypt não será instalado e a implantação do aplicativo falhará.
Uma solução alternativa é adicionar um arquivo .npmrc à raiz do seu projeto que forçará o node-gyp a ser executado como raiz e permitirá que a instalação seja concluída. Conteúdo do arquivo 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
Outra alternativa (talvez a maneira mais certa) é fazer o arquivo .ebextensions com o 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
Isso lhe dará acesso suficiente para executar node-gyp
fonte
Existe uma maneira simples que me permitiu resolver este problema:
1. Desinstale o bcrypt
2.- Instale o bcrypt novamente
O erro ocorre porque quando você instala o bcypt, o npm instala a versão recomendada para sua máquina e sistema operacional, mas quando você está em outra máquina, isso não funciona
fonte
Para aqueles que implantam um aplicativo para o beanstalk elástico AWS e vão instalar o bcrypt no servidor, inclua em um gancho pós-implantação em
.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
fonte
Eu sei que isso pode ser um pouco incômodo, mas é uma solução. O que fiz quando precisei implementar o Bcrypt foi iniciar uma instância do Cloud 9. Para aqueles que não sabem, Cloud9 é um AWS IDE básico que roda em uma instância EC2. De Cloud9, você pode fazer upload de seu código no ide como uma função lambda. Então, escrevi a função no Cloud9 e quando fiz o upload, o código funcionou.
fonte