Pracuję nad projektem nodejs dla szkoły. Nie mogłem zainstalować bcrypt z npm, więc zainstalowałem bcrypt-nodejs i projekt wczoraj działał dobrze. Ale dzisiaj, kiedy wykonuję „aplikację węzła”, mam ten błąd:
/.../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)
mój plik package.json wygląda następująco:
{
"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": "*"
}
}
Jestem na Linuksie Ubuntu 10.04 LTS Próbowałem znaleźć rozwiązanie w Google bez powodzenia ... Czy ktoś może mi pomóc?
Odpowiedzi:
Odkryłem, że bcrypt skompilowany na OSX nie będzie działał na Linuksie . Innymi słowy, jeśli zaznaczysz plik bcrypt skompilowany na lokalnej stacji roboczej OSX i spróbujesz uruchomić aplikację węzła na serwerach linuxowych, zobaczysz powyższy błąd.
Rozwiązanie:
npm install bcrypt
w systemie Linux sprawdź to, rozwiązane.Prawdopodobnie najlepszym sposobem rozwiązania tego problemu jest wykluczenie modułów node_modules w .gitignore ... i zdalna instalacja npm.
źródło
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
aby przetestować.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Nie jest to kompilacja krzyżowa, a raczej dostarczanie wstępnie skompilowanych plików binarnych. Node-gyp domyślnie NIE kompiluje krzyżowo.Jeśli tak jak ja korzystasz z kontenera Dockera, potrzebujesz tylko pliku .dockerignore z określonym w nim „node_modules”.
Niektóre biblioteki muszą zostać skompilowane na komputerze hosta, dlatego moduły mogą być nieaktualne.
źródło
Mój problem dotyczył mojego pliku docker-compose.yml, miałem już node_modules w moim .dockerignore, ale musiałem również dodać katalog node_modules jako wolumin:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
źródło
Miałem również ten sam problem z bcrypt v.1.0.3. Właśnie zaktualizowany do najnowszej wersji (3.0.1) i teraz działa dobrze
Biegać
źródło
Najpierw upewnij się, że nie przesyłasz modułów węzłów i uruchamiasz instalację npm na swoim komputerze z systemem Linux, ponieważ instalacja bcrypt może się różnić w zależności od używanej platformy. Poniżej możesz zapoznać się z innymi instrukcjami instalacji dla innych platform.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Jeśli masz dalsze problemy, może to być związane z node-pre-gyp. Zależność bcrypt.
W przypadku AWS Elastic Beanstalk Podczas wdrażania w Elastic Beanstalk działającym w środowisku Node 8.x, node-gyp nie ma wystarczających uprawnień do zapisu w katalogu tmp. bcrypt nie zostanie zainstalowany, a wdrożenie aplikacji nie powiedzie się.
Rozwiązaniem jest dodanie pliku .npmrc do katalogu głównego projektu, co wymusi działanie node-gyp jako root i umożliwi zakończenie instalacji. Zawartość pliku .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6 unsafe-perm=true
Inną alternatywą (być może właściwszą metodą) jest utworzenie pliku .ebextensions z kodem:
.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
Zapewni to wystarczający dostęp do uruchomienia node-gyp
źródło
Jest prosty sposób, który pozwolił mi rozwiązać ten problem:
1. Odinstaluj bcrypt
2. - Zainstaluj ponownie bcrypt
Błąd występuje, ponieważ podczas instalowania bcypt, npm instaluje zalecaną wersję dla twojego komputera i systemu operacyjnego, ale gdy jesteś na innym komputerze, to nie działa
źródło
Dla tych, którzy wdrażają aplikację w AWS elastycznej łodydze beanstalk i zamierzają zainstalować bcrypt na serwerze, umieść w haku po wdrożeniu w
.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
źródło
Wiem, że może to być trochę kłopotliwe, ale jest to rozwiązanie. To, co zrobiłem, gdy musiałem wdrożyć Bcrypt, to uruchomienie instancji Cloud 9. Dla tych z Was, którzy nie wiedzą, Cloud9 to podstawowe środowisko AWS IDE działające na instancji EC2. Z Cloud9 możesz przesłać swój kod na IDE jako funkcję lambda. Napisałem więc funkcję na Cloud9 i kiedy ją wgrałem, kod zadziałał.
źródło