Помилка встановлення bcrypt з npm


90

Я не можу встановити програму bcryptusing npmна своєму комп'ютері, оскільки трапляються такі помилки. Я вирішував проблему без особливої ​​удачі. Чи можете ви порекомендувати будь-які кроки для діагностики або виправлення проблеми, щоб я міг npm install bcryptуспішно працювати ?

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

Відповіді:


211

Найпростішим рішенням є просто перехід з модуля "bcrypt" npm на bycryptjsабо bcrypt-nodejs. Це точно такий же API, але чистий JS, тому жодних власних доповнень не можна мати.

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

Потім змініть свої requireдзвінки на "bcryptjs", але весь ваш код в іншому випадку може бути незмінним.

Довгостроково, я підозрюю, що на даний момент bcrypt ще може бути не готовий до вузла v0.12.0, але якщо ні, то з часом буде оновлений і готовий.


1
У 2,7 рази повільніше за версію python
rocketspacer

1
bcryptjs працює для мене. bcrypt-nodejs НЕ, однак.
Колбі Кокс,

4
2019 - схоже, bcrypt-nodejs більше не підтримується
Метт

1
це виправлення, а не виправлення. якщо ви не можете перейти на версію bcrypt вузла, перейдіть на встановлення node-gyp (спробуйте npm i bcrypt npde-gyp --force), а потім спробуйте npm i. він повинен будувати правильно.
Кайо Вільсон

1
Я встановив bcrypt-nodejs, хоча він уже застарів, а потім видалив його та встановив bcrypt знову. Ось так, я успішно встановив bcrypt, і він працював нормально.
prettydev

34

для Windows встановіть наступний модуль

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

потім спробуйте встановити

npm install bcrypt

Цей хлопець дає ідеальну відповідь. інші речі застаріли.
Гауранг Джоші

після всіх цих речей, ви також повинні додати pythonвиконуваний файл до змінної свого середовища PATH , щоб інсталятор знайшов його, здається, він потрібен для правильного виконання інсталяції.
Ракібул Хак,

Ви робите це, клацнувши правою кнопкою миші на Powershell і вибираючи "Запуск від імені адміністратора"
Kishan Patel

Також не забудьте закрити будь-який інший термінал (оскільки я не використовую Powershell за замовчуванням), щоб windows-build-toolsзакінчити встановлення. Дякую за цю відповідь btw
3Dos

Запуск від імені адміністратора в Windows
Пратамеш Більше

10

За цією командою:

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

Можливо, вам доведеться запустити це в Powershell як адміністратор на вашому комп'ютері Windows.

Ви робите це, клацнувши правою кнопкою миші на Powershell і вибираючи "Запуск від імені адміністратора"


5

Прийняте рішення працює, але bcryptjs працює повільніше, ніж версії python та c ++.

Якщо ви все ще хочете, щоб bcrypt вказував робоче рішення bcryptjs, це команда нижче, але вони також можуть мати проблеми.

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

У Windows друга команда спробує встановити Visual Studio разом з python і, отже, виникає проблема. тому що чому б ми хотіли встановити Visual studio, і це забирає багато часу. і це також заважає встановленню python. І якщо ви забудете запустити ці команди як Адміністратор, вони будуть встановлені в C: \ Users \ User.windows-build-tools, які далі не працюватимуть, оскільки вузол буде шукати python у C: \ або C: \ Program Files \ . Отже, ці команди в деяких випадках збільшують ваші ускладнення.

Тож найкраща ідея для вас - це ✔️встановити python вручну для всіх користувачів, і не потрібно додавати python до шляху середовища. І виконайте лише першу команду, тобто

✔️ npm install -g node-gyp

Тепер ви готові встановити bcrypt

npm install bcrypt

3

У Mac OS після оновлення Xcode запуск sudo gccта прийняття нової ліцензії Xcode вирішили проблему!


3

Я просто запустив наступне, а потім спробував встановити, і це спрацювало:

npm install node-pre-gyp -g

1

Я зіткнувся з такою ж проблемою на стороні сервера (aws ubuntu 16.04).

Я спробував видалити node_module / bcrypt sudo rm -rf node_module/bcrypt кілька разів і знову і знову встановлював його різними способами, але все одно стикався з тією ж проблемою.

Я перевірив версію вузла за допомогою nvm, і вона також показувала стабільність (v10.11.0).

Нарешті, я спробував.

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

і це спрацювало для мене.


1

Якщо у вас Windows, запустіть PowerShell від імені адміністратора та використовуйте ці команди.

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

а потім встановіть bcrypt за допомогою

npm install --save bcrypt

1

У мене теж була та сама проблема. Мені допомогли наступні команди.

npm rebuild

тоді

npm install bcrypt

1

Причина помилки : Вузол, можливо, не може знайти шлях Python у вашій системі

Рішення

Крок: 1 Командний рядок Rum від імені адміністратора Крок 2 Встановіть пакет

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

Це може зайняти деякий час, будьте терплячі

крок 3 Тепер встановіть

npm install node-gyp

Останній крок Тепер ви готові йти

npm install bcrypt


0

якщо щось із зазначеного вище не працює, виконайте:

npm install node-gyp

Потім відвідайте офіційний сайт для завантаження python Офіційне посилання для завантаження Python

Встановіть останню версію python, обов’язково встановіть прапорець додавати python до шляху додати python до шляху

Після установки виконайте:

npm --save install bcrypt

0

Я встановив bcrypt-nodejs, хоча він уже застарів, а потім видалив його та встановив bcrypt знову. Ось так, я успішно встановив bcrypt, і він працював нормально.

yarn add bcrypt-nodejs
yarn remove bcrypt-nodejs
yarn add bcrypt 

0

Оновлення до bcrypt@5.0.0

npm i bcrypt@5.0.0

Я не отримую помилок у цій новій версії bcrypt, старша версія видавала різні типи помилок, починаючи від неможливості встановити bcrypt до помилок типу typecript


0

Біг

sudo apt install build-essential

встановлює всі інструменти, необхідні для встановлення bcrypt на Linux. Тоді можна бігати

npm install

0

Я мав версію вузла 12.18.3 і виправив те саме, запустивши npm i bcrypt@3.0.6


-1

Була та сама проблема. Оновіть npm і повторіть спробу (зазвичай, встановіть ng -g npm). Це вирішило проблему для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.