Erreur lors de l'installation de bcrypt avec npm

90

Je ne parviens pas à installer bcrypt utilisant npmsur ma machine car je rencontre les erreurs suivantes. J'ai résolu le problème sans beaucoup de chance. Pouvez-vous recommander des étapes pour diagnostiquer ou résoudre le problème afin que je puisse exécuter npm install bcryptcorrectement?

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
la source

Réponses:

211

La solution simple consiste simplement à passer du module npm «bcrypt» à bycryptjsou bcrypt-nodejs. C'est exactement la même API, mais du JS pur, donc pas de modules complémentaires natifs à gérer.

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

Ensuite, changez vos requireappels en "bcryptjs", mais tout votre code peut autrement rester inchangé.

À long terme, je soupçonne pour le moment que bcrypt n'est peut-être pas encore prêt pour le nœud v0.12.0, mais sinon, il sera éventuellement mis à jour et prêt.

Peter Lyons
la source
1
2.7x plus lent que la version python
rocketspacer
1
bcryptjs fonctionne pour moi. Cependant, bcrypt-nodejs ne le fait PAS.
Colby Cox
4
2019 - ressemble Bcrypt-nodejs est plus pris en charge
Matt
1
c'est un correctif, pas LE correctif. si vous ne pouvez pas passer à la version node de bcrypt, allez pour installer node-gyp (essayez npm i bcrypt npde-gyp --force) puis essayez npm i. il devrait se construire correctement.
Caio Wilson du
1
J'ai installé bcrypt-nodejs bien qu'il soit déjà obsolète, puis je l'ai supprimé et réinstallé bcrypt. Comme ça, j'ai installé bcrypt avec succès et cela a bien fonctionné.
prettydev le
34

pour windows installez le module suivant

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

puis essayez d'installer

npm install bcrypt
Harshal_m_joshi
la source
Ce mec donne une réponse parfaite. d'autres choses sont obsolètes.
Gaurang Joshi
après toutes ces choses, vous devez également ajouter un pythonexécutable à votre variable d'environnement PATH , afin que le programme d'installation le trouve, semble en avoir besoin pour exécuter l'installation correctement.
Rakibul Haq
Pour ce faire, faites un clic droit sur Powershell et sélectionnez "Exécuter en tant qu'administrateur"
Kishan Patel
Assurez-vous également de fermer tout autre terminal (car je n'utilise pas Powershell par défaut) afin de windows-build-toolsterminer l'installation. Merci pour cette réponse btw
3Dos
Exécuter en tant qu'administrateur sur Windows
Prathamesh More
10

Sur cette commande:

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

Vous devrez peut-être l'exécuter dans Powershell en tant qu'administrateur sur votre ordinateur Windows.

Pour ce faire, cliquez avec le bouton droit sur Powershell et sélectionnez "Exécuter en tant qu'administrateur"

utilisateur3049560
la source
5

La solution acceptée fonctionne mais bcryptjs est plus lent que la version python et c ++.

Si vous voulez toujours que bcrypt insted de la solution de travail de bcryptjs sont la commande ci-dessous, mais ils peuvent aussi avoir des problèmes.

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

Dans Windows, la deuxième commande essaiera d'installer Visual Studio avec Python et le problème se posera donc. parce que nous pourquoi voudrions-nous installer Visual Studio et cela prend beaucoup de temps. et cela empêche également l'installation de python. Et si vous oubliez d'exécuter ces commandes en tant qu'administrateur, elles seront installées dans C: \ Users \ User.windows-build-tools, ce qui ne fonctionnera plus car le nœud recherchera python dans C: \ ou C: \ Program Files \ . Par conséquent, ces commandes dans certains cas augmentent vos complications.

Donc, la meilleure idée pour vous est de ✔️installer python manuellement pour tous les utilisateurs et il n'est pas nécessaire d'ajouter python au chemin de l'environnement. Et exécutez uniquement la première commande ie

✔️ npm install -g node-gyp

Vous êtes maintenant prêt à installer bcrypt

npm install bcrypt
Suresh Chaudhari
la source
3

Sur Mac OS, après une mise à jour de Xcode, exécuter sudo gccet accepter la nouvelle licence de Xcode a résolu le problème!

Adrien Joly
la source
3

J'ai juste exécuté ce qui suit, puis j'ai essayé l'installation et cela a fonctionné:

npm install node-pre-gyp -g
kjohnsonthecoder
la source
1

J'étais confronté au même problème côté serveur (aws ubuntu 16.04).

J'ai essayé de supprimer node_module / bcrypt sudo rm -rf node_module/bcryptplusieurs fois et je l'ai réinstallé encore et encore de différentes manières mais toujours confronté au même problème.

J'ai vérifié la version du nœud avec nvm et elle montrait également stable (v10.11.0).

Finalement, j'ai essayé.

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

et cela a fonctionné pour moi.

Jitendra
la source
1

Si vous êtes sous Windows, exécutez PowerShell en tant qu'administrateur et utilisez ces commandes.

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

puis installez bcrypt en utilisant

npm install --save bcrypt
Imran Hussain
la source
1

J'avais aussi le même problème. Les commandes suivantes m'ont aidé.

npm rebuild

puis

npm install bcrypt
Shubham Dubey
la source
1

Raison de l'erreur : le nœud ne peut peut-être pas trouver le chemin Python sur votre système

Solution

étape: 1 invite de commande Rum en tant qu'administrateur étape 2 Installez le package

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

Cela peut prendre un certain temps, restez patient

étape 3 Maintenant, installez

npm install node-gyp

Dernière étape Vous êtes maintenant prêt à partir

npm install bcrypt
M Abdullah
la source
0

si l'un des éléments ci-dessus ne fonctionne pas, procédez comme suit:

npm install node-gyp

Ensuite, visitez le site de téléchargement officiel de Python Lien de téléchargement officiel de Python

Installez la dernière version de python, assurez-vous de cocher ajouter python au chemin ajouter python au chemin

Après l'installation, faites:

npm --save install bcrypt
Toye Brainz
la source
0

J'ai installé bcrypt-nodejs bien qu'il soit déjà obsolète, puis je l'ai supprimé et réinstallé bcrypt. Comme ça, j'ai installé bcrypt avec succès et cela a bien fonctionné.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 
prettydev
la source
0

Mettre à niveau vers [email protected]

npm i [email protected]

Je n'obtiens pas d'erreurs sur cette version plus récente de bcrypt, l'ancienne version donnait différents types d'erreurs allant de l'impossibilité d'installer bcrypt aux erreurs de type dactylographié

Akshay Vijay Jain
la source
0

Fonctionnement

sudo apt install build-essential

installe tous les outils dont vous avez besoin pour installer bcrypt sur Linux. Alors tu peux courir

npm install
Mutalik Saunved
la source
0

J'avais la version de nœud 12.18.3 et je l'ai corrigé en exécutant npm i [email protected]

Dasun_96
la source
-1

Avait le même problème. Mettre à jour npm et réessayer (npm install -g npm généralement). Cela résout le problème pour moi.

macrog
la source