Error al instalar bcrypt con npm

90

No puedo instalar el bcryptuso npmen mi máquina porque encuentro los siguientes errores. He estado solucionando el problema sin mucha suerte. ¿Puede recomendarme algún paso para diagnosticar o solucionar el problema para que pueda ejecutarlo npm install bcryptcorrectamente?

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
Hawkharris
fuente

Respuestas:

211

La solución fácil es simplemente cambiar del módulo npm "bcrypt" a bycryptjso bcrypt-nodejs. Es exactamente la misma API, pero JS puro, por lo que no hay complementos nativos con los que lidiar.

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

Luego cambie sus requirellamadas a "bcryptjs", pero todo su código de otra manera no puede ser modificado.

A largo plazo, sospecho que, en este momento, es posible que bcrypt aún no esté listo para el nodo v0.12.0, pero si no, eventualmente se actualizará y estará listo.

Peter Lyons
fuente
1
2.7 veces
1
bcryptjs funciona para mí. Sin embargo, bcrypt-nodejs NO lo hace.
Colby Cox
4
2019 - parece que bcrypt-nodejs ya no es compatible
Matt
1
es una solución, no la solución. Si no puede cambiar a la versión de nodo de bcrypt, vaya a instalar node-gyp (pruebe npm i bcrypt npde-gyp --force) y luego pruebe npm i. debería construirse correctamente.
Caio Wilson
1
Instalé bcrypt-nodejs aunque ya está en desuso, y luego lo eliminé e instalé bcrypt nuevamente. Así, instalé bcrypt con éxito y funcionó bien.
prettydev
34

para windows instale el siguiente módulo

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

luego intenta instalar

npm install bcrypt
Harshal_m_joshi
fuente
Este chico da una respuesta perfecta. otras cosas están en desuso.
Gaurang Joshi
después de todas estas cosas, también debe agregar un pythonejecutable a su variable de entorno PATH , para que el instalador lo encuentre, parezca que lo necesita para ejecutar la instalación correctamente.
Rakibul Haq
Para hacerlo, haga clic con el botón derecho en Powershell y seleccione "Ejecutar como administrador"
Kishan Patel
También asegúrese de cerrar cualquier otro terminal (ya que no uso Powershell por defecto) para que windows-build-toolstermine la instalación. Gracias por esta respuesta por cierto
3 de
Ejecutar como administrador en Windows
Prathamesh Más
10

En este comando:

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

Es posible que deba ejecutar esto en Powershell como administrador en su máquina Windows.

Para hacerlo, haga clic con el botón derecho en Powershell y seleccione "Ejecutar como administrador"

usuario3049560
fuente
5

La solución aceptada funciona, pero bcryptjs es más lento que la versión de python y c ++.

Si aún desea bcrypt en el lugar de la solución de trabajo de bcryptjs, se encuentra el comando a continuación, pero también pueden tener problemas.

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

En Windows, el segundo comando intentará instalar Visual Studio junto con Python y, por lo tanto, surge el problema. porque ¿por qué querríamos instalar Visual Studio y nos lleva mucho tiempo? y también dificulta la instalación de Python. Y si olvida ejecutar esos comandos como administrador, se instalarán en C: \ Users \ User.windows-build-tools que además no funcionarán porque el nodo buscará python en C: \ o C: \ Archivos de programa \ . Por lo tanto, estos comandos en algunos casos aumentan sus complicaciones.

Entonces, la mejor idea para usted es ✔️instalar python manualmente para todos los usuarios y no es necesario agregar Python a la ruta del entorno. Y ejecute solo el primer comando, es decir

✔️ npm install -g node-gyp

Ahora está listo para instalar bcrypt

npm install bcrypt
Suresh Chaudhari
fuente
3

En Mac OS, después de una actualización de Xcode, ¡ejecutar sudo gccy aceptar la nueva licencia de Xcode resolvió el problema!

Adrien Joly
fuente
3

Ejecuté lo siguiente, luego probé la instalación y funcionó:

npm install node-pre-gyp -g
kjohnsonthecoder
fuente
1

Estaba enfrentando el mismo problema en el lado del servidor (aws ubuntu 16.04).

Intenté eliminar node_module / bcrypt sudo rm -rf node_module/bcryptvarias veces y lo reinstalé una y otra vez de varias maneras, pero aún enfrentando el mismo problema.

Verifiqué la versión del nodo con nvm y también se mostraba estable (v10.11.0).

Finalmente lo intenté.

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

Y funcionó para mí.

Jitendra
fuente
1

Si está en Windows, ejecute PowerShell como administrador y use estos comandos.

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

y luego instale bcrypt usando

npm install --save bcrypt
Imran Hussain
fuente
1

Yo también estaba teniendo el mismo problema. Los siguientes comandos me ayudaron.

npm rebuild

entonces

npm install bcrypt
Shubham Dubey
fuente
1

Motivo del error : es posible que el nodo no pueda encontrar la ruta de Python en su sistema

Solución

paso: 1 símbolo del sistema de Rum como administrador paso 2 Instalar el paquete

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

Puede llevar algún tiempo, ten paciencia

paso 3 Ahora instale

npm install node-gyp

Último paso Ahora está listo para comenzar

npm install bcrypt
M Abdullah
fuente
1

Actualice a [email protected]

npm i [email protected]

No recibo errores en esta versión más nueva de bcrypt, la versión anterior dio diferentes tipos de errores que van desde no poder instalar bcrypt hasta errores de tipo mecanografiado

Akshay Vijay Jain
fuente
0

Instalé bcrypt-nodejs aunque ya está en desuso, y luego lo eliminé e instalé bcrypt nuevamente. Así, instalé bcrypt correctamente y funcionó bien.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 
prettydev
fuente
0

Corriendo

sudo apt install build-essential

instala todas las herramientas necesarias para instalar bcrypt en Linux. Entonces puedes correr

npm install
Mutalik salvado
fuente
-1

Tuvo el mismo problema. Actualizando npm y vuelva a intentarlo (normalmente, npm install -g npm). Me solucionó el problema.

macrog
fuente