Erro ao instalar bcrypt com npm

90

Não consigo instalar bcryptusando npmna minha máquina porque encontro os seguintes erros. Tenho resolvido o problema sem muita sorte. Você pode recomendar alguma etapa para diagnosticar ou corrigir o problema para que eu possa executar com npm install bcryptêxito?

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
fonte

Respostas:

211

A solução fácil é apenas mudar do módulo npm "bcrypt" para bycryptjsou bcrypt-nodejs. É exatamente a mesma API, mas JS puro, então nenhum complemento nativo para lidar.

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

Em seguida, altere suas requirechamadas para "bcryptjs", mas todo o seu código de outra forma pode permanecer inalterado.

A longo prazo, eu suspeito que no momento o bcrypt pode não estar pronto para o nó v0.12.0 ainda, mas se não estiver, ele será atualizado e estará pronto.

Peter Lyons
fonte
1
2.7x mais lento do que a versão python
rocketspacer
1
bcryptjs funciona para mim. bcrypt-nodejs NÃO, entretanto.
Colby Cox
4
2019 - parece que bcrypt-nodejs não é mais compatível
Matt
1
é uma correção, não A correção. se você não puder mudar para a versão node do bcrypt, vá para a instalação do node-gyp (tente npm i bcrypt npde-gyp --force) e tente npm i. ele deve ser construído corretamente.
Caio Wilson
1
Eu instalei o bcrypt-nodejs embora ele já esteja obsoleto, e então o removi e instalei o bcrypt novamente. Assim, instalei o bcrypt com sucesso e funcionou bem.
prettydev
34

para windows instale o seguinte módulo

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

então tente instalar

npm install bcrypt
Harshal_m_joshi
fonte
Esse cara dá uma resposta perfeita. outras coisas estão obsoletas.
Gaurang Joshi
depois de tudo isso, você também deve adicionar pythonexecutável à sua variável de ambiente PATH , para que o instalador o encontre, pareça que ele precisa para executar a instalação corretamente.
Rakibul Haq
Para fazer isso, clique com o botão direito do mouse no PowerShell e selecione "Executar como administrador"
Kishan Patel
Certifique-se também de fechar qualquer outro terminal (já que não uso o Powershell por padrão) para windows-build-toolsconcluir a instalação. Obrigado por esta resposta btw
3Dos
Executar como administrador no Windows
Prathamesh More
10

Neste comando:

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

Você pode ter que executar isso no Powershell como administrador em sua máquina Windows.

Você faz isso clicando com o botão direito do mouse no PowerShell e selecione "Executar como administrador"

user3049560
fonte
5

A solução aceita funciona, mas o bcryptjs é mais lento do que a versão python e c ++.

Se você ainda quiser o bcrypt em vez da solução de trabalho do bcryptjs, consulte o comando abaixo, mas eles também podem ter problemas.

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

No Windows, o segundo comando tentará instalar o visual studio junto com o python e, portanto, o problema surge. porque gostaríamos de instalar o Visual Studio e isso levaria muito tempo. e também dificulta a instalação do python. E se você se esquecer de executar esses comandos como Administrador, eles serão instalados em C: \ Usuários \ Usuário.windows-build-tools, o que também não funcionará porque o nó pesquisará por python em C: \ ou C: \ Arquivos de Programas \ . Portanto, em alguns casos, esses comandos aumentam suas complicações.

Portanto, a melhor ideia para você é ✔️instalar o python manualmente para todos os usuários e não é necessário adicionar o python ao caminho do ambiente. E execute apenas o primeiro comando, ou seja,

✔️ npm install -g node-gyp

Agora você está pronto para instalar o bcrypt

npm install bcrypt
Suresh Chaudhari
fonte
3

No Mac OS, após uma atualização do Xcode, executar sudo gcce aceitar a nova licença do Xcode resolveu o problema!

Adrien Joly
fonte
3

Acabei de executar o seguinte, tentei instalar e funcionou:

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

Eu estava enfrentando o mesmo problema no lado do servidor (aws ubuntu 16.04).

Eu tentei excluir node_module / bcrypt por sudo rm -rf node_module/bcrypt várias vezes e reinstalá-lo novamente de várias maneiras, mas ainda enfrentando o mesmo problema.

Eu verifiquei a versão do nó com nvm e também estava mostrando estável (v10.11.0).

Finalmente, tentei.

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

e funcionou para mim.

Jitendra
fonte
1

Se você estiver no Windows, execute o PowerShell como administrador e use esses comandos.

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

e instale o bcrypt usando

npm install --save bcrypt
Imran Hussain
fonte
1

Eu também estava tendo o mesmo problema. Os comandos a seguir me ajudaram.

npm rebuild

então

npm install bcrypt
Shubham Dubey
fonte
1

Razão do erro : o nó talvez não consiga encontrar o caminho do Python em seu sistema

Solução

etapa: 1 prompt de comando Rum como administrador etapa 2 Instale o pacote

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

Pode demorar um pouco, seja paciente

passo 3 Agora instale

npm install node-gyp

Última etapa Agora você está pronto para ir

npm install bcrypt
M Abdullah
fonte
0

se alguma das opções acima não funcionar, faça:

npm install node-gyp

Depois visite o site oficial de download do python oficial de download do Python. Link oficial para download do Python

Instale a versão mais recente do python, certifique-se de marcar adicionar python ao caminho adicionar python ao caminho

Após a instalação, faça:

npm --save install bcrypt
Toye Brainz
fonte
0

Eu instalei o bcrypt-nodejs embora ele já esteja obsoleto, e então o removi e instalei o bcrypt novamente. Assim, instalei o bcrypt com sucesso e funcionou bem.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 
Prettydev
fonte
0

Atualize para [email protected]

npm i [email protected]

Não estou recebendo erros nesta versão mais recente do bcrypt, a versão mais antiga apresentava diferentes tipos de erros, desde não foi possível instalar o bcrypt até erros do tipo typecript

Akshay Vijay Jain
fonte
0

Corrida

sudo apt install build-essential

instala todas as ferramentas de que você precisa para instalar o bcrypt no Linux. Então você pode correr

npm install
Saunved Mutalik
fonte
-1

Tive o mesmo problema. Atualize o npm e tente novamente (normalmente, npm install -g npm). Isso corrigiu o problema para mim.

macrog
fonte