เกิดข้อผิดพลาดในการติดตั้ง bcrypt ด้วย npm


92

ฉันไม่สามารถติดตั้งbcryptโดยใช้npmเครื่องของฉันได้เนื่องจากฉันพบข้อผิดพลาดต่อไปนี้ ฉันได้รับการแก้ไขปัญหาโดยไม่มีโชค คุณช่วยแนะนำขั้นตอนในการวินิจฉัยหรือแก้ไขปัญหาเพื่อให้ทำงานได้npm install bcryptสำเร็จหรือไม่

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

คำตอบ:


215

ทางออกที่ง่ายเป็นเพียงสวิทช์จาก "bcrypt" NPM โมดูลหรือbycryptjs bcrypt-nodejsเป็น API เดียวกันทุกประการ แต่เป็น JS ที่บริสุทธิ์จึงไม่มีส่วนเสริมดั้งเดิมให้จัดการ

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

จากนั้นเปลี่ยนการrequireโทรของคุณเป็น "bcryptjs" แต่รหัสทั้งหมดของคุณจะไม่เปลี่ยนแปลง

ในระยะยาวฉันสงสัยว่าในขณะนี้ bcrypt อาจยังไม่พร้อมสำหรับโหนด v0.12.0 แต่หากไม่เป็นเช่นนั้นจะได้รับการอัปเดตและพร้อมใช้งานในที่สุด


1
ช้ากว่าเวอร์ชัน python 2.7 เท่า
rocketspacer

1
bcryptjs ใช้ได้กับฉัน bcrypt-nodejs ไม่ได้แม้ว่า
Colby Cox

4
2019 - ดูเหมือนว่า bcrypt-nodejs จะไม่รองรับอีกต่อไป
Matt

1
มันเป็นการแก้ไขไม่ใช่การแก้ไข หากคุณไม่สามารถเปลี่ยนไปใช้ bcrypt เวอร์ชันโหนดได้ให้ไปติดตั้ง node-gyp (ลอง npm i bcrypt npde-gyp --force) จากนั้นลองใช้ npm i ควรสร้างอย่างถูกต้อง
Caio Wilson

1
ฉันติดตั้ง bcrypt-nodejs แม้ว่าจะเลิกใช้งานไปแล้วจากนั้นจึงลบออกและติดตั้ง bcrypt อีกครั้ง เช่นนี้ฉันติดตั้ง bcrypt สำเร็จและทำงานได้ดี
สูงสุด

35

สำหรับ windows ติดตั้งโมดูลต่อไปนี้

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

จากนั้นลองติดตั้ง

npm install bcrypt

ผู้ชายคนนี้ให้คำตอบที่สมบูรณ์แบบ สิ่งอื่น ๆ เลิกใช้แล้ว
Gaurang Joshi

หลังจากสิ่งเหล่านี้คุณควรเพิ่มpythonไฟล์ปฏิบัติการให้กับPATH ตัวแปรสภาพแวดล้อมของคุณเพื่อให้ตัวติดตั้งพบว่ามันต้องการเพื่อดำเนินการติดตั้งอย่างถูกต้อง
Rakibul Haq

คุณทำได้โดยคลิกขวาที่ Powershell และเลือก "Run As Administrator"
Kishan Patel

อย่าลืมปิดเทอร์มินัลอื่นด้วย (เนื่องจากฉันไม่ได้ใช้ Powershell ตามค่าเริ่มต้น) เพื่อwindows-build-toolsให้การติดตั้งเสร็จสิ้น ขอบคุณสำหรับคำตอบนี้ btw
3Dos

Run as Administrator บน Windows
Prathamesh More

11

ในคำสั่งนี้:

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

คุณอาจต้องเรียกใช้สิ่งนี้ใน Powershell ในฐานะผู้ดูแลระบบบนเครื่อง Windows ของคุณ

คุณทำได้โดยคลิกขวาที่ Powershell และเลือก "Run As Administrator"


5

โซลูชันที่ยอมรับใช้งานได้ แต่ bcryptjs ช้ากว่าเวอร์ชัน python และ c ++

หากคุณยังคงต้องการ bcrypt ที่ติดตั้งโซลูชันการทำงาน bcryptjs อยู่ด้านล่าง แต่อาจมีปัญหาได้

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

ใน Windows คำสั่งที่สองจะพยายามติดตั้ง visual studio พร้อมกับ python และด้วยเหตุนี้ปัญหาจึงเกิดขึ้น เพราะเหตุใดเราจึงต้องการติดตั้ง Visual studio และต้องใช้เวลามาก และยังขัดขวางการติดตั้ง python และหากคุณลืมเรียกใช้คำสั่งเหล่านั้นในฐานะผู้ดูแลระบบคำสั่งเหล่านั้นจะได้รับการติดตั้งที่ C: \ Users \ User.windows-build-tools ซึ่งจะไม่ทำงานต่อไปเนื่องจาก node จะค้นหา python ใน C: \ หรือ C: \ Program Files \ . ดังนั้นในบางกรณีคำสั่งนี้จะเพิ่มความยุ่งยากของคุณ

ดังนั้นความคิดที่ดีที่สุดสำหรับคุณคือ✔️ติดตั้ง python ด้วยตนเองสำหรับผู้ใช้ทั้งหมดและไม่จำเป็นต้องเพิ่ม python ในเส้นทางสภาพแวดล้อม และรันเฉพาะคำสั่งแรกคือ

✔️ npm install -g node-gyp

ตอนนี้คุณพร้อมที่จะติดตั้ง bcrypt แล้ว

npm install bcrypt

3

บน Mac OS หลังจากอัปเดต Xcode การรันsudo gccและยอมรับใบอนุญาตใหม่ของ Xcode ช่วยแก้ปัญหาได้!


3

ฉันเพิ่งรันสิ่งต่อไปนี้จากนั้นลองติดตั้งและใช้งานได้:

npm install node-pre-gyp -g

1

ฉันประสบปัญหาเดียวกันที่ฝั่งเซิร์ฟเวอร์ (aws ubuntu 16.04)

ฉันพยายามลบ node_module / bcrypt sudo rm -rf node_module/bcryptหลายครั้งและติดตั้งใหม่ครั้งแล้วครั้งเล่าด้วยวิธีต่างๆ แต่ยังคงประสบปัญหาเดิม

ฉันตรวจสอบเวอร์ชันโหนดด้วย nvm และแสดงว่าเสถียรด้วย (v10.11.0)

ในที่สุดฉันก็พยายาม

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

และมันได้ผลสำหรับฉัน


1

หากคุณใช้ windows ให้รัน powershell ในฐานะผู้ดูแลระบบและใช้คำสั่งเหล่านี้

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

จากนั้นติดตั้ง bcrypt โดยใช้ไฟล์

npm install --save bcrypt

1

ฉันก็มีปัญหาเดียวกัน คำสั่งต่อไปนี้ช่วยฉันได้

npm rebuild

แล้ว

npm install bcrypt

1

สาเหตุของข้อผิดพลาด : โหนดอาจไม่สามารถค้นหาเส้นทาง Python ในระบบของคุณ

วิธีการแก้

ขั้นตอน: 1 พรอมต์คำสั่ง Rum ในฐานะผู้ดูแลระบบ ขั้นตอนที่ 2 ติดตั้งแพ็คเกจ

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

อาจใช้เวลาสักครู่โปรดอดทนรอ

ขั้นตอนที่ 3ตอนนี้ติดตั้ง

npm install node-gyp

ขั้นตอนสุดท้ายตอน นี้คุณพร้อมที่จะไปแล้ว

npm install bcrypt


1

อัปเกรดเป็นbcrypt@5.0.0

npm i bcrypt@5.0.0

ฉันไม่ได้รับข้อผิดพลาดใน bcrypt เวอร์ชันที่ใหม่กว่านี้เวอร์ชันเก่าให้ข้อผิดพลาดประเภทต่างๆตั้งแต่ไม่สามารถติดตั้ง bcrypt ไปจนถึงข้อผิดพลาดประเภท typescript


0

หากข้อใดข้อหนึ่งข้างต้นไม่สามารถใช้งานได้ให้ทำ:

npm install node-gyp

หลังจากนั้นไปที่เว็บไซต์ดาวน์โหลด python อย่างเป็นทางการลิงค์ดาวน์โหลด Python อย่างเป็นทางการ

ติดตั้ง python เวอร์ชันล่าสุดอย่าลืมตรวจสอบ add python ไปที่ path เพิ่ม python ในเส้นทาง

หลังการติดตั้งให้ทำ:

npm --save install bcrypt

0

ฉันติดตั้ง bcrypt-nodejs แม้ว่าจะเลิกใช้งานไปแล้วจากนั้นจึงลบออกและติดตั้ง bcrypt อีกครั้ง เช่นนี้ฉันติดตั้ง bcrypt สำเร็จและทำงานได้ดี

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

0

วิ่ง

sudo apt install build-essential

ติดตั้งเครื่องมือทั้งหมดที่คุณต้องติดตั้ง bcrypt บน Linux จากนั้นคุณสามารถเรียกใช้

npm install

0

ฉันมีโหนดเวอร์ชัน 12.18.3 และแก้ไขเหมือนกันโดยการเรียกใช้ npm i bcrypt@3.0.6


-1

มีปัญหาเดียวกัน กำลังอัปเดต npm แล้วลองอีกครั้ง (โดยปกติแล้วจะมีการติดตั้ง npm -g npm) มันช่วยแก้ปัญหาให้ฉันได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.