Lỗi khi cài đặt bcrypt với npm


90

Tôi không thể cài đặt bcryptbằng cách sử dụng npmtrên máy của mình vì tôi gặp phải các lỗi sau. Tôi đã khắc phục sự cố mà không gặp nhiều may mắn. Bạn có thể giới thiệu bất kỳ bước nào để chẩn đoán hoặc khắc phục sự cố để tôi có thể chạy npm install bcryptthành công không?

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

Câu trả lời:


211

Giải pháp đơn giản là chỉ cần chuyển từ mô-đun npm "bcrypt" sang bycryptjshoặc bcrypt-nodejs. Đó là cùng một API, nhưng JS thuần túy nên không có tiện ích bổ sung gốc nào để xử lý.

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

Sau đó, thay đổi requirecuộc gọi của bạn thành "bcryptjs", nhưng tất cả mã của bạn nếu không có thể thay đổi.

Về lâu dài, tôi nghi ngờ tại thời điểm này, bcrypt có thể chưa sẵn sàng cho nút v0.12.0, nhưng nếu không, cuối cùng nó sẽ được cập nhật và sẵn sàng.


1
2.7x chậm hơn so với phiên bản python
rocketspacer

1
bcryptjs phù hợp với tôi. Tuy nhiên, bcrypt-nodejs KHÔNG.
Colby Cox

4
2019 - có vẻ như bcrypt-nodejs không còn được hỗ trợ nữa
Matt

1
nó là một sửa chữa, không phải sửa chữa. nếu bạn không thể chuyển sang phiên bản nút của bcrypt, hãy cài đặt nút-gyp (thử npm i bcrypt npde-gyp --force) rồi thử npm i. nó sẽ xây dựng chính xác.
Caio Wilson

1
Tôi đã cài đặt bcrypt-nodejs mặc dù nó đã không được dùng nữa, sau đó gỡ bỏ nó và cài đặt lại bcrypt. Như thế này, tôi đã cài đặt bcrypt thành công và nó hoạt động tốt.
prettydev

34

cho windows cài đặt mô-đun sau

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

sau đó cố gắng cài đặt

npm install bcrypt

Anh chàng này đưa ra một câu trả lời hoàn hảo. những thứ khác không được dùng nữa.
Gaurang Joshi

sau tất cả những điều này, bạn cũng nên thêm pythontệp thực thi vào PATH biến môi trường của mình , để trình cài đặt tìm thấy nó, có vẻ như nó cần nó để thực thi cài đặt đúng cách.
Rakibul Haq

Bạn làm điều đó bằng cách kích chuột phải vào Powershell và chọn "Run As Administrator"
Kishan Patel

Ngoài ra, hãy đảm bảo đóng bất kỳ thiết bị đầu cuối nào khác (vì tôi không sử dụng Powershell theo mặc định) để tấn windows-build-toolshoàn tất quá trình cài đặt. Cảm ơn bạn vì câu trả lời này btw
3Dos

Chạy với tư cách Quản trị viên trên Windows
Prathamesh More

10

Trên lệnh này:

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

Bạn có thể phải chạy điều này trong Powershell với tư cách quản trị viên trên máy Windows của mình.

Bạn thực hiện điều đó bằng cách nhấp chuột phải vào Powershell và chọn "Run As Administrator"


5

Giải pháp được chấp nhận hoạt động nhưng bcryptjs chậm hơn phiên bản python và c ++.

Nếu bạn vẫn muốn bcrypt chèn giải pháp làm việc bcryptjs là lệnh bên dưới, nhưng chúng cũng có thể có vấn đề.

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

Trong Windows, lệnh thứ hai sẽ cố gắng cài đặt visual studio cùng với python và do đó vấn đề phát sinh. bởi vì chúng tôi tại sao chúng tôi muốn cài đặt Visual studio và nó mất rất nhiều thời gian. và nó cũng cản trở quá trình cài đặt python. Và nếu bạn quên chạy các lệnh đó với tư cách là Quản trị viên thì chúng sẽ được cài đặt tại C: \ Users \ User.windows-build-tools mà sẽ không hoạt động nữa vì nút sẽ tìm kiếm python trong C: \ hoặc C: \ Program Files \ . Do đó, lệnh này trong một số trường hợp làm tăng sự phức tạp của bạn.

Vì vậy, ý tưởng tốt nhất cho bạn là ✔️ cài đặt python theo cách thủ công cho Tất cả người dùng và không cần thiết phải thêm python vào đường dẫn môi trường. Và chỉ chạy lệnh đầu tiên, tức là

✔️ npm install -g node-gyp

Bây giờ bạn đã sẵn sàng cài đặt bcrypt

npm install bcrypt

3

Trên Mac OS, sau khi cập nhật Xcode, việc chạy sudo gccvà chấp nhận giấy phép mới của Xcode đã giải quyết được vấn đề!


3

Tôi chỉ chạy phần sau, sau đó thử cài đặt và nó hoạt động:

npm install node-pre-gyp -g

1

Tôi đang gặp phải vấn đề tương tự ở phía máy chủ (aws ubuntu 16.04).

Tôi đã thử xóa node_module / bcrypt sudo rm -rf node_module/bcryptnhiều lần và cài đặt lại nó nhiều lần bằng nhiều cách khác nhau nhưng vẫn gặp phải vấn đề tương tự.

Tôi đã kiểm tra phiên bản nút với nvm và nó cũng đang hiển thị ổn định (v10.11.0).

Cuối cùng, tôi đã thử.

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

và nó đã làm việc cho tôi.


1

Nếu bạn đang sử dụng windows, hãy chạy powershell với tư cách quản trị viên và sử dụng các lệnh này.

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

và sau đó cài đặt bcrypt bằng

npm install --save bcrypt

1

Tôi cũng đang gặp vấn đề tương tự. Các lệnh sau đây đã giúp tôi.

npm rebuild

sau đó

npm install bcrypt

1

Lý do lỗi : Nút có thể không thể tìm thấy đường dẫn Python trên hệ thống của bạn

Giải pháp

bước: 1 Dấu nhắc lệnh Rum với tư cách là quản trị viên bước 2 Cài đặt gói

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

Có thể mất một chút thời gian, hãy kiên nhẫn

bước 3 Bây giờ cài đặt

npm install node-gyp

Bước cuối cùng Bây giờ bạn đã sẵn sàng để bắt đầu

npm install bcrypt



0

Tôi đã cài đặt bcrypt-nodejs mặc dù nó đã không được dùng nữa, sau đó gỡ bỏ nó và cài đặt lại bcrypt. Như thế này, tôi đã cài đặt bcrypt thành công và nó hoạt động tốt.

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

0

Nâng cấp lên bcrypt@5.0.0

npm i bcrypt@5.0.0

Tôi không gặp lỗi trên phiên bản bcrypt mới hơn này, phiên bản cũ hơn có các loại lỗi khác nhau, từ không thể cài đặt bcrypt đến lỗi loại bản ghi


0

Đang chạy

sudo apt install build-essential

cài đặt tất cả các công cụ bạn cần để cài đặt bcrypt trên Linux. Sau đó, bạn có thể chạy

npm install

-1

Có cùng một vấn đề. Đang cập nhật npm và thử lại (thường là npm install -g npm). Nó khắc phục sự cố cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.