Terjadi kesalahan saat menginstal bcrypt dengan npm


90

Saya tidak dapat menginstal bcryptmenggunakan npmpada mesin saya karena saya mengalami kesalahan berikut. Saya telah memecahkan masalah ini tanpa banyak keberuntungan. Dapatkah Anda merekomendasikan langkah apa pun untuk mendiagnosis atau memperbaiki masalah sehingga saya dapat berjalan dengan npm install bcryptsukses?

Someones-Macbook:node_modules Cody$ npm install bcrypt
npm WARN package.json grunt-contrib-htmlmin@0.1.3 No README data
|
> bcrypt@0.7.7 install /Applications/MAMP/htdocs/richintime/ultimate-seed/node_modules/bcrypt
> node-gyp rebuild

child_process: customFds option is deprecated, use stdio instead.
  CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o
  CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o
../src/bcrypt_node.cc:118:18: error: no member named 'Dispose' in 'v8::Persistent<v8::Function, v8::NonCopyablePersistentTraits<v8::Function>
      >'
        callback.Dispose();
        ~~~~~~~~ ^
../src/bcrypt_node.cc:202:19: error: unknown type name 'uv_work_t'
void GenSaltAsync(uv_work_t* req) {
                  ^
../src/bcrypt_node.cc:219:24: error: unknown type name 'uv_work_t'
void GenSaltAsyncAfter(uv_work_t* req) {
                       ^
../src/bcrypt_node.cc:220:17: error: calling a protected constructor of class 'v8::HandleScope'
    HandleScope scope;
                ^
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:816:13: note: declared protected here
  V8_INLINE HandleScope() {}
            ^
../src/bcrypt_node.cc:228:44: error: no member named 'New' in 'v8::String'
        argv[0] = Exception::Error(String::New(baton->error.c_str()));
                                   ~~~~~~~~^
../src/bcrypt_node.cc:229:19: error: no matching function for call to 'Undefined'
        argv[1] = Undefined();
                  ^~~~~~~~~
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:305:28: note: candidate function not viable: requires single argument 'isolate', but no
      arguments were provided
  friend Handle<Primitive> Undefined(Isolate* isolate);
                           ^
../src/bcrypt_node.cc:232:19: error: no matching function for call to 'Undefined'
        argv[0] = Undefined();
                  ^~~~~~~~~
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:305:28: note: candidate function not viable: requires single argument 'isolate', but no
      arguments were provided
  friend Handle<Primitive> Undefined(Isolate* isolate);
                           ^
../src/bcrypt_node.cc:238:20: error: member reference type 'v8::Persistent<v8::Function>' is not a pointer; maybe you meant to use '.'?
    baton->callback->Call(Context::GetCurrent()->Global(), 2, argv);
    ~~~~~~~~~~~~~~~^~
                   .
../src/bcrypt_node.cc:238:22: error: no member named 'Call' in 'v8::Persistent<v8::Function, v8::NonCopyablePersistentTraits<v8::Function> >'
    baton->callback->Call(Context::GetCurrent()->Global(), 2, argv);
    ~~~~~~~~~~~~~~~  ^
../src/bcrypt_node.cc:238:36: error: no member named 'GetCurrent' in 'v8::Context'
    baton->callback->Call(Context::GetCurrent()->Global(), 2, argv);
                          ~~~~~~~~~^
../src/bcrypt_node.cc:246:34: error: unknown type name 'Arguments'; did you mean 'v8::internal::Arguments'?
Handle<Value> GenerateSalt(const Arguments &args) {
                                 ^~~~~~~~~
                                 v8::internal::Arguments
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:127:7: note: 'v8::internal::Arguments' declared here
class Arguments;
      ^
../src/bcrypt_node.cc:247:17: error: calling a protected constructor of class 'v8::HandleScope'
    HandleScope scope;
                ^
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:816:13: note: declared protected here
  V8_INLINE HandleScope() {}
            ^
../src/bcrypt_node.cc:249:32: error: type 'const v8::internal::Arguments' does not provide a subscript operator
    const ssize_t rounds = args[0]->Int32Value();
                           ~~~~^~
../src/bcrypt_node.cc:250:30: error: type 'const v8::internal::Arguments' does not provide a subscript operator
    const int rand_len = args[1]->Int32Value();
                         ~~~~^~
../src/bcrypt_node.cc:251:58: error: type 'const v8::internal::Arguments' does not provide a subscript operator
    Local<Function> callback = Local<Function>::Cast(args[2]);
                                                     ~~~~^~
../src/bcrypt_node.cc:255:45: error: 'New' is a private member of 'v8::PersistentBase<v8::Function>'
    baton->callback = Persistent<Function>::New(callback);
                                            ^
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:572:23: note: declared private here
  V8_INLINE static T* New(Isolate* isolate, T* that);
                      ^
../src/bcrypt_node.cc:255:57: error: too few arguments to function call, expected 2, have 1
    baton->callback = Persistent<Function>::New(callback);
                      ~~~~~~~~~~~~~~~~~~~~~~~~~         ^
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8.h:572:3: note: 'New' declared here
  V8_INLINE static T* New(Isolate* isolate, T* that);
  ^
/Users/Cody/.node-gyp/0.12.0/deps/v8/include/v8config.h:289:20: note: expanded from macro 'V8_INLINE'
# define V8_INLINE inline __attribute__((always_inline))
                   ^
../src/bcrypt_node.cc:259:5: error: unknown type name 'uv_work_t'
    uv_work_t* req = new uv_work_t;
    ^
../src/bcrypt_node.cc:259:26: error: unknown type name 'uv_work_t'
    uv_work_t* req = new uv_work_t;
                         ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [Release/obj.target/bcrypt_lib/src/bcrypt_node.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1067:12)
gyp ERR! System Darwin 13.4.0
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Applications/MAMP/htdocs/richintime/ultimate-seed/node_modules/bcrypt
gyp ERR! node -v v0.12.0
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 
npm ERR! Darwin 13.4.0
npm ERR! argv "node" "/usr/local/bin/npm" "install" "bcrypt"
npm ERR! node v0.12.0
npm ERR! npm  v2.7.1
npm ERR! code ELIFECYCLE

npm ERR! bcrypt@0.7.7 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the bcrypt@0.7.7 install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild

Jawaban:


211

Solusi mudahnya hanya dengan beralih dari modul "bcrypt" npm ke bycryptjsatau bcrypt-nodejs. Ini adalah API yang sama persis, tetapi JS murni sehingga tidak ada add-on asli yang harus ditangani.

npm install --save bcryptjs && npm uninstall --save bcrypt

Kemudian ubah requirepanggilan Anda ke "bcryptjs", tetapi semua kode Anda tidak dapat diubah.

Untuk jangka panjang, saya menduga saat ini bcrypt mungkin belum siap untuk node v0.12.0, tetapi jika tidak, pada akhirnya akan diperbarui dan siap.


1
2,7x lebih lambat dari versi python
rocketspacer

1
bcryptjs bekerja untuk saya. bcrypt-nodejs TIDAK.
Colby Cox

4
2019 - sepertinya bcrypt-nodejs tidak lagi didukung
Matt

1
itu perbaikan, bukan perbaikan ATAS. jika Anda tidak dapat beralih ke versi node dari bcrypt, lanjutkan untuk menginstal node-gyp (coba npm i bcrypt npde-gyp --force) lalu coba npm i. itu harus dibangun dengan benar.
Caio Wilson

1
Saya menginstal bcrypt-nodejs meskipun sudah tidak digunakan lagi, lalu menghapusnya dan menginstal bcrypt lagi. Seperti ini, saya berhasil menginstal bcrypt dan berfungsi dengan baik.
prettydev

34

untuk windows instal modul berikut

npm install -g node-gyp
npm install --g --production windows-build-tools

lalu coba instal

npm install bcrypt

Orang ini memberikan jawaban yang sempurna. hal-hal lain tidak digunakan lagi.
Gaurang Joshi

setelah semua hal ini, Anda juga harus menambahkan pythonexecutable ke variabel lingkungan PATH Anda , sehingga penginstal menemukannya, tampaknya perlu untuk menjalankan penginstalan dengan benar.
Rakibul Haq

Anda melakukannya dengan mengklik kanan pada Powershell dan memilih "Run As Administrator"
Kishan Patel

Pastikan juga untuk menutup terminal lain (karena saya tidak menggunakan Powershell secara default) agar windows-build-toolspenginstalan selesai. Terima kasih atas jawaban ini btw
3Dos

Jalankan sebagai Administrator di Windows
Prathamesh Selengkapnya

10

Pada perintah ini:

npm install --g --production windows-build-tools

Anda mungkin harus menjalankan ini di Powershell sebagai administrator di mesin Windows Anda.

Anda melakukannya dengan mengklik kanan pada Powershell dan memilih "Run As Administrator"


5

Solusi yang diterima berfungsi tetapi bcryptjs lebih lambat dari versi python dan c ++.

Jika Anda masih ingin bcrypt insted dari solusi kerja bcryptjs adalah perintah di bawah ini, tetapi mereka juga bisa mengalami masalah.

✔️ npm install -g node-gyp
❌ npm install --g --production windows-build-tools

Di Windows perintah kedua akan mencoba menginstal visual studio bersama dengan python dan karenanya masalah muncul. karena kami mengapa kami ingin menginstal Visual studio dan itu membutuhkan banyak waktu. dan itu juga menghalangi instalasi python. Dan jika Anda lupa menjalankan perintah tersebut sebagai Administrator maka mereka akan diinstal di C: \ Users \ User.windows-build-tools yang selanjutnya tidak akan berfungsi karena node akan mencari python di C: \ atau C: \ Program Files \ . Karenanya perintah ini dalam beberapa kasus meningkatkan komplikasi Anda.

Jadi ide terbaik bagi Anda adalah ✔️install python secara manual untuk Semua Pengguna Dan Tidak perlu menambahkan python ke jalur lingkungan. Dan jalankan hanya perintah pertama yaitu

✔️ npm install -g node-gyp

Sekarang Anda siap untuk menginstal bcrypt

npm install bcrypt

3

Di Mac OS, setelah pembaruan Xcode, menjalankan sudo gccdan menerima lisensi baru Xcode memecahkan masalah!


3

Saya hanya menjalankan yang berikut ini kemudian mencoba menginstal dan berhasil:

npm install node-pre-gyp -g

1

Saya menghadapi masalah yang sama di sisi server (aws ubuntu 16.04).

Saya mencoba menghapus node_module / bcrypt sudo rm -rf node_module/bcryptberkali-kali dan menginstalnya kembali dengan berbagai cara tetapi masih menghadapi masalah yang sama.

Saya memeriksa versi node dengan nvm dan itu juga menunjukkan stabil (v10.11.0).

Akhirnya, saya mencoba.

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

dan itu berhasil untuk saya.


1

Jika Anda menggunakan windows, jalankan PowerShell sebagai administrator dan gunakan perintah ini.

npm install --g --production windows-build-tools

dan kemudian instal bcrypt menggunakan

npm install --save bcrypt

1

Saya juga mengalami masalah yang sama. Perintah berikut membantu saya.

npm rebuild

kemudian

npm install bcrypt

1

Alasan Kesalahan : Node mungkin tidak dapat menemukan jalur Python di sistem Anda

Larutan

langkah: 1 Rum command prompt sebagai administrator langkah 2 Instal paket

  npm install --global --production windows-build-tools

Mungkin butuh beberapa saat, tetap bersabar

langkah 3 Sekarang instal

npm install node-gyp

Langkah terakhir Sekarang Anda siap untuk Pergi

npm install bcrypt


1

Tingkatkan ke bcrypt@5.0.0

npm i bcrypt@5.0.0

Saya tidak mendapatkan kesalahan pada versi bcrypt yang lebih baru ini, versi yang lebih lama memberikan berbagai jenis kesalahan mulai dari tidak dapat menginstal bcrypt hingga kesalahan jenis skrip


0

jika salah satu cara di atas gagal berfungsi, lakukan:

npm install node-gyp

Setelah itu kunjungi situs unduhan resmi python Tautan unduhan resmi Python

Instal versi terbaru python, pastikan untuk mencentang tambahkan python ke jalur tambahkan python ke jalur

Setelah instalasi, lakukan:

npm --save install bcrypt

0

Saya menginstal bcrypt-nodejs meskipun sudah tidak digunakan lagi, lalu menghapusnya dan menginstal bcrypt lagi. Seperti ini, saya berhasil menginstal bcrypt dan berfungsi dengan baik.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 

0

Lari

sudo apt install build-essential

menginstal semua alat yang Anda butuhkan untuk menginstal bcrypt di Linux. Lalu kamu bisa lari

npm install

0

Saya memiliki versi node 12.18.3 dan memperbaikinya dengan menjalankan npm i bcrypt@3.0.6


-1

Punya masalah yang sama. Memperbarui npm dan coba lagi (biasanya npm install -g npm). Ini memperbaiki masalah saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.