Błąd podczas instalowania bcrypt z npm

90

Nie mogę zainstalować programu bcryptprzy użyciu npmna moim komputerze, ponieważ napotykam następujące błędy. Rozwiązałem ten problem bez powodzenia. Czy możesz zalecić jakieś kroki w celu zdiagnozowania lub rozwiązania problemu, aby móc npm install bcryptpomyślnie uruchomić ?

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
źródło

Odpowiedzi:

211

Najprostszym rozwiązaniem jest przejście z modułu npm „bcrypt” na bycryptjslub bcrypt-nodejs. To dokładnie to samo API, ale czysty JS, więc nie ma do czynienia z natywnymi dodatkami.

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

Następnie zmień requirewywołania na „bcryptjs”, ale w przeciwnym razie cały kod może pozostać niezmieniony.

Podejrzewam, że w tej chwili bcrypt może nie być jeszcze gotowy na węzeł v0.12.0, ale jeśli nie, zostanie ostatecznie zaktualizowany i gotowy.

Peter Lyons
źródło
1
2,7x wolniej niż wersja Pythona
rocketspacer
1
bcryptjs działa dla mnie. Jednak bcrypt-nodejs NIE.
Colby Cox
4
2019 - wygląda na to, że bcrypt-nodejs nie jest już obsługiwany
Matt
1
to poprawka, a nie poprawka. Jeśli nie możesz przełączyć się na wersję bcrypt dla węzłów, przejdź do instalacji node-gyp (spróbuj npm i bcrypt npde-gyp --force), a następnie spróbuj npm i. powinien być poprawnie zbudowany.
Caio Wilson
1
Zainstalowałem bcrypt-nodejs, chociaż jest już przestarzały, a następnie usunąłem go i ponownie zainstalowałem bcrypt. W ten sposób pomyślnie zainstalowałem bcrypt i działało dobrze.
prettydev
34

w systemie Windows zainstaluj następujący moduł

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

następnie spróbuj zainstalować

npm install bcrypt
Harshal_m_joshi
źródło
Ten facet daje doskonałą odpowiedź. inne rzeczy są przestarzałe.
Gaurang Joshi
po tych wszystkich rzeczach powinieneś również dodać pythonplik wykonywalny do zmiennej środowiskowej PATH , aby instalator go znalazł, wydaje się, że potrzebuje go do poprawnego wykonania instalacji.
Rakibul Haq
Robisz to, klikając prawym przyciskiem myszy Powershell i wybierając „Uruchom jako administrator”
Kishan Patel
Pamiętaj również o zamknięciu dowolnego innego terminala (ponieważ domyślnie nie używam Powershell), aby windows-build-toolszakończyć instalację. Przy okazji dziękuję za tę odpowiedź
3Dos
Uruchom jako administrator w systemie Windows
Prathamesh Więcej
10

Na to polecenie:

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

Może być konieczne uruchomienie tego w programie PowerShell jako administrator na komputerze z systemem Windows.

Robisz to, klikając prawym przyciskiem myszy Powershell i wybierając „Uruchom jako administrator”

user3049560
źródło
5

Zaakceptowane rozwiązanie działa, ale bcryptjs jest wolniejsze niż wersja w Pythonie i C ++.

Jeśli nadal chcesz, aby bcrypt zamiast działającego rozwiązania bcryptjs, skorzystał z poniższych poleceń, ale mogą również mieć problem.

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

W systemie Windows drugie polecenie spróbuje zainstalować Visual Studio wraz z Pythonem i stąd problem. ponieważ dlaczego mielibyśmy chcieć zainstalować Visual Studio i zajmuje to dużo czasu. a także utrudnia instalację Pythona. A jeśli zapomnisz uruchomić to polecenie jako Administrator, zostaną one zainstalowane w C: \ Users \ User.windows-build-tools, które dalej nie będą działać, ponieważ węzeł będzie szukał Pythona w C: \ lub C: \ Program Files \ . Stąd te polecenia w niektórych przypadkach zwiększają twoje komplikacje.

Dlatego najlepszym pomysłem dla Ciebie jest ✔️ ręczna instalacja języka Python dla wszystkich użytkowników i nie jest konieczne dodawanie języka Python do ścieżki środowiska. I uruchom tylko pierwsze polecenie, tj

✔️ npm install -g node-gyp

Teraz jesteś gotowy do zainstalowania bcrypt

npm install bcrypt
Suresh Chaudhari
źródło
3

W systemie Mac OS, po aktualizacji Xcode, uruchomienie sudo gcci zaakceptowanie nowej licencji Xcode rozwiązało problem!

Adrien Joly
źródło
3

Po prostu uruchomiłem następujące, a następnie wypróbowałem instalację i zadziałało:

npm install node-pre-gyp -g
kjohnsonthecoder
źródło
1

Miałem ten sam problem po stronie serwera (aws ubuntu 16.04).

Próbowałem kilkakrotnie usunąć node_module / bcrypt sudo rm -rf node_module/bcrypti ponownie instalowałem go na różne sposoby, ale nadal napotykam ten sam problem.

Sprawdziłem wersję węzła za pomocą nvm i również pokazywała stabilną (v10.11.0).

Wreszcie spróbowałem.

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

i to zadziałało dla mnie.

Jitendra
źródło
1

Jeśli korzystasz z systemu Windows, uruchom PowerShell jako administrator i użyj tych poleceń.

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

a następnie zainstaluj bcrypt przy użyciu

npm install --save bcrypt
Imran Hussain
źródło
1

Ja też miałem ten sam problem. Pomogły mi następujące polecenia.

npm rebuild

następnie

npm install bcrypt
Shubham Dubey
źródło
1

Przyczyna błędu : Node może nie być w stanie znaleźć ścieżki Pythona w twoim systemie

Rozwiązanie

krok: 1 Wiersz polecenia Rum jako administrator krok 2 Zainstaluj pakiet

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

Może to trochę potrwać, zachowaj cierpliwość

krok 3 Teraz zainstaluj

npm install node-gyp

Ostatni krok Teraz jesteś gotowy do pracy

npm install bcrypt
M Abdullah
źródło
1

Uaktualnij do [email protected]

npm i [email protected]

Nie otrzymuję błędów w tej nowszej wersji bcrypt, starsza wersja dawała różne typy błędów, od niemożności zainstalowania bcrypt do błędów typu maszynopisu

Akshay Vijay Jain
źródło
0

jeśli którykolwiek z powyższych nie działa, wykonaj:

npm install node-gyp

Następnie odwiedź oficjalną stronę pobierania Pythona Oficjalny link do pobrania Pythona

Zainstaluj najnowszą wersję Pythona, pamiętaj, aby zaznaczyć opcję Dodaj python do ścieżki dodaj pythona do ścieżki

Po instalacji wykonaj:

npm --save install bcrypt
Toye Brainz
źródło
0

Zainstalowałem bcrypt-nodejs, chociaż jest już przestarzały, a następnie usunąłem go i ponownie zainstalowałem bcrypt. W ten sposób pomyślnie zainstalowałem bcrypt i działało dobrze.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 
prettydev
źródło
0

Bieganie

sudo apt install build-essential

instaluje wszystkie narzędzia potrzebne do zainstalowania bcrypt w systemie Linux. Wtedy możesz biec

npm install
Saunved Mutalik
źródło
0

Miałem wersję węzła 12.18.3 i naprawiłem to samo, uruchamiając npm i [email protected]

Dasun_96
źródło
-1

Miałem ten sam problem. Aktualizuję npm i spróbuj ponownie (zwykle npm install -g npm). Rozwiązuje problem dla mnie.

macrog
źródło