Saya sedang mengerjakan proyek nodejs untuk sekolah. Saya tidak dapat menginstal bcrypt dengan npm jadi saya menginstal bcrypt-nodejs dan proyek tersebut bekerja dengan baik kemarin. Tapi hari ini, ketika saya melakukan "aplikasi node" saya mengalami kesalahan ini:
/.../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)
file package.json saya terlihat seperti ini:
{
"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": "*"
}
}
Saya menggunakan Linux ubuntu 10.04 LTS Saya telah mencoba menemukan solusi di google tanpa hasil ... Adakah yang bisa membantu saya?
Jawaban:
Saya telah menemukan bahwa bcrypt yang dikompilasi di OSX tidak akan berfungsi di Linux . Dengan kata lain, jika Anda memeriksa bcrypt yang dikompilasi di workstation OSX lokal Anda, dan mencoba menjalankan aplikasi node di server linux Anda, Anda akan melihat kesalahan di atas.
Solusi:
npm install bcrypt
di Linux, periksa itu, diselesaikan.Mungkin cara terbaik untuk menangani ini adalah mengecualikan node_modules Anda di .gitignore ... dan npm install dari jarak jauh.
sumber
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
untuk menguji.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Ini bukan kompilasi silang, melainkan memberi Anda binari yang telah dikompilasi sebelumnya. Node-gyp TIDAK melakukan kompilasi silang secara default.Jika Anda menjalankan di dalam kontainer buruh pelabuhan seperti saya, yang Anda butuhkan hanyalah .dockerignore dengan 'node_modules' ditentukan di dalamnya.
Beberapa pustaka perlu dikompilasi pada mesin host dan oleh karena itu modul Anda mungkin sudah usang.
sumber
Masalah saya adalah dengan file docker-compose.yml saya, saya sudah memiliki node_modules di .dockerignore saya tetapi saya juga perlu menambahkan direktori node_modules sebagai volume:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
sumber
Saya juga menghadapi masalah yang sama dengan bcrypt v.1.0.3. Baru saja diperbarui ke versi terbaru (3.0.1) dan berfungsi dengan baik sekarang
Lari
sumber
Pertama-tama, pastikan Anda tidak mengunggah modul node dan menjalankan npm install di mesin linux Anda sendiri karena instalasi bcrypt dapat bervariasi tergantung pada platform yang Anda gunakan. Anda dapat melihat petunjuk penginstalan lain untuk platform lain di bawah.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Jika Anda mengalami masalah lebih lanjut, ini mungkin terkait dengan node-pre-gyp. Ketergantungan bcrypt.
Untuk AWS Elastic Beanstalk Saat menerapkan ke Elastic Beanstalk yang menjalankan Node 8.x, node-gyp tidak memiliki izin yang memadai untuk menulis ke direktori tmp. bcrypt tidak dapat diinstal dan penerapan aplikasi akan gagal.
Solusinya adalah dengan menambahkan file .npmrc ke root proyek Anda yang akan memaksa node-gyp untuk dijalankan sebagai root dan memungkinkan penginstalan selesai. Isi file untuk .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6 unsafe-perm=true
Alternatif lain (Mungkin cara yang lebih tepat) adalah membuat file .ebextensions dengan kode:
.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
Ini akan memberi Anda akses yang memadai untuk menjalankan node-gyp
sumber
Ada cara sederhana yang memungkinkan saya menyelesaikan masalah ini:
1. Copot pemasangan bcrypt
2.- Instal bcrypt lagi
Kesalahan terjadi karena ketika Anda menginstal bcypt, npm menginstal versi yang disarankan untuk mesin dan sistem operasi Anda, tetapi ketika Anda berada di komputer lain, ini tidak berfungsi
sumber
Bagi mereka yang menerapkan aplikasi ke AWS elastic beanstalk, dan akan menginstal bcrypt di server, termasuk dalam hook penerapan posting di
.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
sumber
Saya tahu bahwa ini mungkin sedikit merepotkan tetapi ini adalah solusinya. Apa yang saya lakukan ketika saya perlu mengimplementasikan Bcrypt, adalah saya memulai instance Cloud 9. Bagi Anda yang tidak tahu, Cloud9 adalah AWS IDE dasar yang berjalan pada instans EC2. Dari Cloud9 Anda dapat mengunggah kode Anda pada ide sebagai fungsi lambda. Jadi saya menulis fungsinya di Cloud9 dan ketika saya mengunggahnya, kodenya berfungsi.
sumber