Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error installing bcrypt with npm

I'm unable to install bcrypt using npm on my machine because I encounter the following errors. I have been troubleshooting the issue without much luck. Can you recommend any steps to diagnose or fix the problem so I can run npm install bcrypt successfully?

Someones-Macbook:node_modules Cody$ npm install bcrypt npm WARN package.json [email protected] No README data | > [email protected] 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! [email protected] install: `node-gyp rebuild` npm ERR! Exit status 1 npm ERR!  npm ERR! Failed at the [email protected] 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 
like image 200
hawkharris Avatar asked Mar 28 '15 17:03

hawkharris


People also ask

What is bcrypt npm?

The bcrypt npm package is a JavaScript implementation of the bcrypt password hashing function that allows you to easily create a hash out of a password string . Unlike encryption which you can decode to get back the original password, hashing is a one-way function that can't be reversed once done.

What's the difference between bcrypt and Bcryptjs?

bcryptjs explicitly says "Optimized bcrypt in JavaScript with zero dependencies." So, yes, it's a pure Javascript implementation of bcrypt, which purportedly even "runs in the browser". bcrypt on the other hands list a number of dependencies. bcryptjs purports to be compatible with bcrypt.


2 Answers

The easy solution is just switch from the "bcrypt" npm module to bycryptjs or bcrypt-nodejs. It's the exact same API, but pure JS so no native add-ons to deal with.

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

Then change your require calls to "bcryptjs", but all your code otherwise can be unchanged.

Long term, I suspect at the moment bcrypt may not be ready for node v0.12.0 yet, but if not it will eventually be updated and ready.

like image 154
Peter Lyons Avatar answered Nov 15 '22 16:11

Peter Lyons


For windows install the following module:

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

Then try to install:

npm install bcrypt 
like image 29
Harshal_m_joshi Avatar answered Nov 15 '22 15:11

Harshal_m_joshi