Fehler beim Installieren von bcrypt mit npm

90

Ich kann nicht bcryptmit npmauf meinem Computer installieren , da die folgenden Fehler auftreten. Ich habe das Problem ohne viel Glück behoben. Können Sie Schritte zur Diagnose oder Behebung des Problems empfehlen, damit ich npm install bcrypterfolgreich ausgeführt werden kann?

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
quelle

Antworten:

211

Die einfache Lösung besteht darin, einfach vom "bcrypt" -npm-Modul zu bycryptjsoder zu wechseln bcrypt-nodejs. Es ist genau die gleiche API, aber reines JS, also keine nativen Add-Ons, mit denen man sich befassen muss.

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

Ändern Sie dann Ihre requireAnrufe in "bcryptjs", aber ansonsten kann Ihr gesamter Code unverändert bleiben.

Langfristig vermute ich, dass bcrypt im Moment noch nicht für den Knoten v0.12.0 bereit ist, aber wenn nicht, wird es irgendwann aktualisiert und bereit sein.

Peter Lyons
quelle
1
2,7x langsamer als Python-Version
Rocketspacer
1
bcryptjs funktioniert bei mir. bcrypt-nodejs tut dies jedoch NICHT.
Colby Cox
4
2019 - sieht so aus, als ob bcrypt-nodejs nicht mehr unterstützt wird
Matt
1
Es ist ein Fix, nicht der Fix. Wenn Sie nicht zur Knotenversion von bcrypt wechseln können, installieren Sie node-gyp (versuchen Sie npm i bcrypt npde-gyp --force) und versuchen Sie dann npm i. es sollte richtig bauen.
Caio Wilson
1
Ich habe bcrypt-nodejs installiert, obwohl es bereits veraltet ist, und es dann entfernt und bcrypt erneut installiert. So habe ich bcrypt erfolgreich installiert und es hat gut funktioniert.
Prettydev
34

Installieren Sie für Windows das folgende Modul

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

Versuchen Sie dann zu installieren

npm install bcrypt
Harshal_m_joshi
quelle
Dieser Typ gibt eine perfekte Antwort. andere Dinge sind veraltet.
Gaurang Joshi
Nach all diesen Dingen sollten Sie pythonIhrer Umgebungsvariablen PATH auch eine ausführbare Datei hinzufügen , damit das Installationsprogramm sie findet und sie anscheinend benötigt, um die Installation ordnungsgemäß auszuführen.
Rakibul Haq
Klicken Sie dazu mit der rechten Maustaste auf Powershell und wählen Sie "Als Administrator
ausführen
Schließen Sie auch jedes andere Terminal (da ich standardmäßig kein Powershell verwende), damit windows-build-toolsdie Installation abgeschlossen ist. Vielen Dank für diese Antwort übrigens
3Dos
Führen Sie als Administrator unter Windows
Prathamesh More
10

Auf diesen Befehl:

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

Möglicherweise müssen Sie dies in Powershell als Administrator auf Ihrem Windows-Computer ausführen.

Klicken Sie dazu mit der rechten Maustaste auf Powershell und wählen Sie "Als Administrator ausführen".

user3049560
quelle
5

Die akzeptierte Lösung funktioniert, aber bcryptjs ist langsamer als die Python- und C ++ - Version.

Wenn Sie immer noch möchten, dass bcrypt von bcryptjs Arbeitslösung installiert wird, geben Sie den folgenden Befehl ein, aber sie können auch Probleme haben.

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

Unter Windows versucht der zweite Befehl, Visual Studio zusammen mit Python zu installieren, und daher tritt das Problem auf. weil wir warum sollten wir Visual Studio installieren wollen und es viel Zeit in Anspruch nimmt. und es behindert auch die Installation von Python. Und wenn Sie vergessen, diesen Befehl als Administrator auszuführen, werden sie unter C: \ Users \ User.windows-build-tools installiert, was außerdem nicht funktioniert, da der Knoten in C: \ oder C: \ Programme \ nach Python sucht . Daher erhöhen diese Befehle in einigen Fällen Ihre Komplikationen.

Die beste Idee für Sie ist es, Python manuell für alle Benutzer zu installieren. Es ist nicht erforderlich, Python zum Umgebungspfad hinzuzufügen. Und führen Sie nur den ersten Befehl aus, dh

✔️ npm install -g node-gyp

Jetzt können Sie bcrypt installieren

npm install bcrypt
Suresh Chaudhari
quelle
3

Unter Mac OS sudo gcclöste das Ausführen und Akzeptieren der neuen Lizenz von Xcode nach einem Xcode-Update das Problem!

Adrien Joly
quelle
3

Ich habe gerade Folgendes ausgeführt und dann die Installation versucht und es hat funktioniert:

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

Ich hatte das gleiche Problem auf der Serverseite (aws ubuntu 16.04).

Ich habe mehrmals versucht, node_module / bcrypt zu löschen sudo rm -rf node_module/bcryptund es auf verschiedene Weise immer wieder neu zu installieren, habe aber immer noch das gleiche Problem.

Ich habe die Knotenversion mit nvm überprüft und sie zeigte auch stabil (v10.11.0).

Schließlich habe ich es versucht.

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

und es hat bei mir funktioniert.

Jitendra
quelle
1

Wenn Sie unter Windows arbeiten, führen Sie Powershell als Administrator aus und verwenden Sie diese Befehle.

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

und installieren Sie dann bcrypt mit

npm install --save bcrypt
Imran Hussain
quelle
1

Ich hatte auch das gleiche Problem. Die folgenden Befehle haben mir geholfen.

npm rebuild

dann

npm install bcrypt
Shubham Dubey
quelle
1

Grund für den Fehler : Der Knoten kann den Python-Pfad auf Ihrem System möglicherweise nicht finden

Lösung

Schritt: 1 Rum-Eingabeaufforderung als Administrator Schritt 2 Installieren Sie das Paket

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

Es kann einige Zeit dauern, geduldig zu bleiben

Schritt 3 Jetzt installieren

npm install node-gyp

Letzter Schritt Jetzt können Sie loslegen

npm install bcrypt
M Abdullah
quelle
0

Wenn einer der oben genannten Punkte nicht funktioniert, gehen Sie wie folgt vor:

npm install node-gyp

Besuchen Sie anschließend die offizielle Python-Download-Site. Offizieller Python-Download-Link

Installieren Sie die neueste Version von Python. Stellen Sie sicher, dass Sie Python zum Pfad hinzufügen aktivieren Fügen Sie dem Pfad Python hinzu

Führen Sie nach der Installation Folgendes aus:

npm --save install bcrypt
Toye Brainz
quelle
0

Ich habe bcrypt-nodejs installiert, obwohl es bereits veraltet ist, und es dann entfernt und bcrypt erneut installiert. So habe ich bcrypt erfolgreich installiert und es hat gut funktioniert.

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

Upgrade auf [email protected]

npm i [email protected]

Ich erhalte keine Fehler bei dieser neueren Version von bcrypt. Die ältere Version gab verschiedene Arten von Fehlern an, die von der Nichtinstallation von bcrypt bis zu Fehlern vom Typ Typoskript reichten

Akshay Vijay Jain
quelle
0

Laufen

sudo apt install build-essential

Installiert alle Tools, die Sie zur Installation von bcrypt unter Linux benötigen. Dann kannst du rennen

npm install
Saunved Mutalik
quelle
-1

Hatte das gleiche Problem. Aktualisieren Sie npm und versuchen Sie es erneut (normalerweise installiert npm -g npm). Es behebt das Problem für mich.

Macrog
quelle