Linux:scrypt 包中的 node-gyp 安裝問題
這種情況發生在我身上的次數已經夠多了,以至於我認為從中提出問題將是一種公共利益。
有一個名為的 npm 包
scrypt
被用於許多與乙太坊相關的 npm 包中。scrypt
,反過來,有一個名為node-gyp
. 根據我的經驗,該node-gyp
軟體包安裝失敗的可能性很高。我知道我過去已經解決了這個問題,並且以某種方式安裝了它,但是我厭倦了每次需要它時都重新發明輪子。相關資訊:
作業系統:Debian 10
節點:12.16.1
我做過但沒有幫助的相關事情:
- 全球安裝
- 將使用的 Python 版本更新為 3.x
安裝它的技巧是什麼?
這是上次失敗的輸出:
error /home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt: Command failed. Exit code: 1 Command: node-gyp rebuild Arguments: Directory: /home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt Output: gyp info it worked if it ends with ok gyp info using node-gyp@5.1.0 gyp info using node@12.16.1 | linux | x64 gyp info find Python using Python version 3.7.3 found at "/usr/bin/python3" gyp info spawn /usr/bin/python3 gyp info spawn args [ gyp info spawn args '/home/x/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py', gyp info spawn args 'binding.gyp', gyp info spawn args '-f', gyp info spawn args 'make', gyp info spawn args '-I', gyp info spawn args '/home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt/build/config.gypi', gyp info spawn args '-I', gyp info spawn args '/home/x/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/addon.gypi', gyp info spawn args '-I', gyp info spawn args '/home/x/.cache/node-gyp/12.16.1/include/node/common.gypi', gyp info spawn args '-Dlibrary=shared_library', gyp info spawn args '-Dvisibility=default', gyp info spawn args '-Dnode_root_dir=/home/x/.cache/node-gyp/12.16.1', gyp info spawn args '-Dnode_gyp_dir=/home/x/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp', gyp info spawn args '-Dnode_lib_file=/home/x/.cache/node-gyp/12.16.1/<(target_arch)/node.lib', gyp info spawn args '-Dmodule_root_dir=/home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt', gyp info spawn args '-Dnode_engine=v8', gyp info spawn args '--depth=.', gyp info spawn args '--no-parallel', gyp info spawn args '--generator-output', gyp info spawn args 'build', gyp info spawn args '-Goutput_dir=.' gyp info spawn args ] gyp info spawn make gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] make: Entering directory '/home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt/build' SOLINK_MODULE(target) Release/obj.target/copied_files.node COPY Release/copied_files.node CC(target) Release/obj.target/scrypt_wrapper/src/util/memlimit.o CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o AR(target) Release/obj.target/scrypt_wrapper.a COPY Release/scrypt_wrapper.a CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o AR(target) Release/obj.target/scrypt_lib.a COPY Release/scrypt_lib.a CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o In file included from ../src/node-boilerplate/scrypt_common.cc:28: ../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’: ../../nan/nan.h:2294:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type] , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete) ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_common.cc:28: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]’: /home/x/.cache/node-gyp/12.16.1/include/node/node_object_wrap.h:85:78: required from here /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<node::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type] reinterpret_cast<Callback>(callback), type); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]’: ../../nan/nan_object_wrap.h:65:61: required from here /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type] CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o In file included from ../src/node-boilerplate/scrypt_params_async.cc:1: ../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’: ../../nan/nan.h:2294:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type] , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete) ^ In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h: In constructor ‘NodeScrypt::Params::Params(const v8::Local<v8::Object>&)’: ../src/node-boilerplate/inc/scrypt_common.h:39:48: warning: ‘v8::Local<v8::Value> v8::Object::Get(v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] N(obj->Get(Nan::New("N").ToLocalChecked())->Uint32Value()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3553:51: note: declared here V8_DEPRECATED("Use maybe version", Local<Value> Get(Local<Value> key)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h:39:63: error: no matching function for call to ‘v8::Value::Uint32Value()’ N(obj->Get(Nan::New("N").ToLocalChecked())->Uint32Value()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate: ‘v8::Maybe<unsigned int> v8::Value::Uint32Value(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<uint32_t> Uint32Value( ^~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h:40:48: warning: ‘v8::Local<v8::Value> v8::Object::Get(v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] r(obj->Get(Nan::New("r").ToLocalChecked())->Uint32Value()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3553:51: note: declared here V8_DEPRECATED("Use maybe version", Local<Value> Get(Local<Value> key)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h:40:63: error: no matching function for call to ‘v8::Value::Uint32Value()’ r(obj->Get(Nan::New("r").ToLocalChecked())->Uint32Value()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate: ‘v8::Maybe<unsigned int> v8::Value::Uint32Value(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<uint32_t> Uint32Value( ^~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h:41:48: warning: ‘v8::Local<v8::Value> v8::Object::Get(v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] p(obj->Get(Nan::New("p").ToLocalChecked())->Uint32Value()) {} ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3553:51: note: declared here V8_DEPRECATED("Use maybe version", Local<Value> Get(Local<Value> key)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ In file included from ../src/node-boilerplate/inc/scrypt_async.h:28, from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_common.h:41:63: error: no matching function for call to ‘v8::Value::Uint32Value()’ p(obj->Get(Nan::New("p").ToLocalChecked())->Uint32Value()) {} ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate: ‘v8::Maybe<unsigned int> v8::Value::Uint32Value(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<uint32_t> Uint32Value( ^~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2707:41: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/inc/scrypt_params_async.h:28, from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_async.h: In member function ‘virtual void ScryptAsyncWorker::HandleErrorCallback()’: ../src/node-boilerplate/inc/scrypt_async.h:53:29: warning: ‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’ is deprecated [-Wdeprecated-declarations] callback->Call(1, argv); ^ In file included from ../src/node-boilerplate/scrypt_params_async.cc:1: ../../nan/nan.h:1742:3: note: declared here Call(int argc, v8::Local<v8::Value> argv[]) const { ^~~~ In file included from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_params_async.h: In constructor ‘ScryptParamsAsyncWorker::ScryptParamsAsyncWorker(Nan::NAN_METHOD_ARGS_TYPE)’: ../src/node-boilerplate/inc/scrypt_params_async.h:35:36: error: no matching function for call to ‘v8::Value::NumberValue()’ maxtime(info[0]->NumberValue()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2704:39: note: candidate: ‘v8::Maybe<double> v8::Value::NumberValue(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const; ^~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2704:39: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_params_async.h:36:39: error: no matching function for call to ‘v8::Value::NumberValue()’ maxmemfrac(info[1]->NumberValue()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2704:39: note: candidate: ‘v8::Maybe<double> v8::Value::NumberValue(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const; ^~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2704:39: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_params_async.h:37:36: error: no matching function for call to ‘v8::Value::IntegerValue()’ maxmem(info[2]->IntegerValue()), ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2705:40: note: candidate: ‘v8::Maybe<long int> v8::Value::IntegerValue(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue( ^~~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2705:40: note: candidate expects 1 argument, 0 provided In file included from ../src/node-boilerplate/scrypt_params_async.cc:4: ../src/node-boilerplate/inc/scrypt_params_async.h:38:39: error: no matching function for call to ‘v8::Value::IntegerValue()’ osfreemem(info[3]->IntegerValue()) ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2705:40: note: candidate: ‘v8::Maybe<long int> v8::Value::IntegerValue(v8::Local<v8::Context>) const’ V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue( ^~~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:2705:40: note: candidate expects 1 argument, 0 provided ../src/node-boilerplate/scrypt_params_async.cc: In member function ‘virtual void ScryptParamsAsyncWorker::HandleOKCallback()’: ../src/node-boilerplate/scrypt_params_async.cc:23:67: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] obj->Set(Nan::New("N").ToLocalChecked(), Nan::New<Integer>(logN)); ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here bool Set(Local<Value> key, Local<Value> value)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ ../src/node-boilerplate/scrypt_params_async.cc:24:64: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] obj->Set(Nan::New("r").ToLocalChecked(), Nan::New<Integer>(r)); ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here bool Set(Local<Value> key, Local<Value> value)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ ../src/node-boilerplate/scrypt_params_async.cc:25:64: warning: ‘bool v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)’ is deprecated: Use maybe version [-Wdeprecated-declarations] obj->Set(Nan::New("p").ToLocalChecked(), Nan::New<Integer>(p)); ^ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/v8-internal.h:14, from /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:27, from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:3499:22: note: declared here bool Set(Local<Value> key, Local<Value> value)); ^~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’ declarator __attribute__((deprecated(message))) ^~~~~~~~~~ ../src/node-boilerplate/scrypt_params_async.cc:32:25: warning: ‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’ is deprecated [-Wdeprecated-declarations] callback->Call(2, argv); ^ In file included from ../src/node-boilerplate/scrypt_params_async.cc:1: ../../nan/nan.h:1742:3: note: declared here Call(int argc, v8::Local<v8::Value> argv[]) const { ^~~~ In file included from /home/x/.cache/node-gyp/12.16.1/include/node/node.h:63, from ../../nan/nan.h:56, from ../src/node-boilerplate/scrypt_params_async.cc:1: /home/x/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]’: /home/x/.cache/node-gyp/12.16.1/include/node/node_object_wrap.h:85:78: required from here /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<node::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type] reinterpret_cast<Callback>(callback), type); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/x/.cache/node-gyp/12.16.1/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]’: ../../nan/nan_object_wrap.h:65:61: required from here /home/x/.cache/node-gyp/12.16.1/include/node/v8.h:10226:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type] make: *** [scrypt.target.mk:131: Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o] Error 1 make: Leaving directory '/home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt/build' gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/home/x/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23) gyp ERR! stack at ChildProcess.emit (events.js:311:20) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12) gyp ERR! System Linux 4.19.0-10-amd64 gyp ERR! command "/home/x/.nvm/versions/node/v12.16.1/bin/node" "/home/x/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /home/x/code/unifyadmin/packages/blockchain/node_modules/scrypt
看評論,提到了兩個想法:我在執行Node v12,@Jay 建議降級到v11,@Ismael 建議可以通過導入
web3
<1.2.9 來觸發失敗。正如 Ismael 所提到的,這僅在您直接導入時才有幫助web3
- 如果依賴項正在拉入舊版本的 .web3
,它將無濟於事。碰巧的是,在我的個人設置中,問題是由依賴引起的。此外,Node v11 給了我同樣的錯誤(基於 2020 年 9 月 1 日的嘗試)。接下來,我嘗試向下移植到 Erbium (12.13) 之前的最後一個 LTS,即 Dunbium (10.13-10.22),但它確實奏效了。
我想強調一下,這個答案可能有點短暫,因為依賴項和 web3 的變化,或者甚至
node-gyp
可能scrypt
完全解決或改變問題,但是今天這對我有用,所以我想我應該把它留在這裡其他人認為有幫助的情況。**更新/**旁注(2020 年 10 月):Nomic Labs宣布發布一個庫,用於替代
node-gyp
被呼叫的ethereum-cryptography
. 這只是一個旁注,因為它對編譯已經合併的項目沒有幫助node-gyp
,但是如果您正在建構(建構?)一個新項目,請看看您是否可以避免進一步造成這些創傷,以及那些祝福生態系統的人請使用他們的框架和工具,請確保您使用的是ethereum-cryptography
而不是node-gyp
.