maticnetwork / contracts

Smart contracts comprising the business logic of the Matic Network
https://matic.network
GNU General Public License v3.0
1.15k stars 506 forks source link

Cannot install because of node-gyp error #367

Open talentlessguy opened 3 years ago

talentlessguy commented 3 years ago

Seems like MATIC contracts use scrypt that has a node-gyp script that fails:

../scrypt@6.0.3/node_modules/scrypt install$ node-gyp rebuild
│ gyp info it worked if it ends with ok
│ gyp info using node-gyp@8.1.0
│ gyp info using node@14.17.3 | linux | x64
│ gyp info find Python using Python version 3.9.6 found at "/usr/bin/python3"
│ gyp info spawn /usr/bin/python3
│ gyp info spawn args [
│ gyp info spawn args   '/home/v1rtl/n/pnpm-global/5/node_modules/.pnpm/pnpm@6.10.3/node_modules/pnpm/dist/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/v1rtl/polygon-testnet/contracts/node_modules/.pnpm/scrypt@6.0.3/node_modules/scrypt/build/config.gypi',
│ gyp info spawn args   '-I',
│ gyp info spawn args   '/home/v1rtl/n/pnpm-global/5/node_modules/.pnpm/pnpm@6.10.3/node_modules/pnpm/dist/node_modules/node-gyp/addon.gypi',
│ gyp info spawn args   '-I',
│ gyp info spawn args   '/home/v1rtl/.cache/node-gyp/14.17.3/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/v1rtl/.cache/node-gyp/14.17.3',
│ gyp info spawn args   '-Dnode_gyp_dir=/home/v1rtl/n/pnpm-global/5/node_modules/.pnpm/pnpm@6.10.3/node_modules/pnpm/dist/node_modules/node-gyp',
│ gyp info spawn args   '-Dnode_lib_file=/home/v1rtl/.cache/node-gyp/14.17.3/<(target_arch)/node.lib',
│ gyp info spawn args   '-Dmodule_root_dir=/home/v1rtl/polygon-testnet/contracts/node_modules/.pnpm/scrypt@6.0.3/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/v1rtl/polygon-testnet/contracts/node_modules/.pnpm/scrypt@6.0.3/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
│   CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o
│ 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:17: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>)’
│    39 |       N(obj->Get(Nan::New("N").ToLocalChecked())->Uint32Value()),
│       |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
│  3717 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
│  3720 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 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:17: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>)’
│    40 |       r(obj->Get(Nan::New("r").ToLocalChecked())->Uint32Value()),
│       |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
│  3717 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
│  3720 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 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:17: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>)’
│    41 |       p(obj->Get(Nan::New("p").ToLocalChecked())->Uint32Value()) {}
│       |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
│  3717 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
│  3720 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
│       |                                           ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 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:21: warning: ‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’ is deprecated [-Wdeprecated-declarations]
│    53 |       callback->Call(1, argv);
│       |       ~~~~~~~~~~~~~~^~~~~~~~~
│ In file included from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ ../../../../nan@2.14.2/node_modules/nan/nan.h:1742:3: note: declared here
│  1742 |   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:35: error: no matching function for call to ‘v8::Value::NumberValue()’
│    35 |       maxtime(info[0]->NumberValue()),
│       |               ~~~~~~~~~~~~~~~~~~~~^~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2861:39: note: candidate: ‘v8::Maybe<double> v8::Value::NumberValue(v8::Local<v8::Context>) const’
│  2861 |   V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const;
│       |                                       ^~~~~~~~~~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2861: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:38: error: no matching function for call to ‘v8::Value::NumberValue()’
│    36 |       maxmemfrac(info[1]->NumberValue()),
│       |                  ~~~~~~~~~~~~~~~~~~~~^~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2861:39: note: candidate: ‘v8::Maybe<double> v8::Value::NumberValue(v8::Local<v8::Context>) const’
│  2861 |   V8_WARN_UNUSED_RESULT Maybe<double> NumberValue(Local<Context> context) const;
│       |                                       ^~~~~~~~~~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2861: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:35: error: no matching function for call to ‘v8::Value::IntegerValue()’
│    37 |       maxmem(info[2]->IntegerValue()),
│       |              ~~~~~~~~~~~~~~~~~~~~~^~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2863:40: note: candidate: ‘v8::Maybe<long int> v8::Value::IntegerValue(v8::Local<v8::Context>) const’
│  2863 |   V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue(
│       |                                        ^~~~~~~~~~~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2863: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:38: error: no matching function for call to ‘v8::Value::IntegerValue()’
│    38 |       osfreemem(info[3]->IntegerValue())
│       |                 ~~~~~~~~~~~~~~~~~~~~~^~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2863:40: note: candidate: ‘v8::Maybe<long int> v8::Value::IntegerValue(v8::Local<v8::Context>) const’
│  2863 |   V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue(
│       |                                        ^~~~~~~~~~~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:2863: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:11: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
│    23 |   obj->Set(Nan::New("N").ToLocalChecked(), Nan::New<Integer>(logN));
│       |   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
│  3670 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
│  3673 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
│ ../src/node-boilerplate/scrypt_params_async.cc:24:11: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
│    24 |   obj->Set(Nan::New("r").ToLocalChecked(), Nan::New<Integer>(r));
│       |   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
│  3670 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
│  3673 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
│ ../src/node-boilerplate/scrypt_params_async.cc:25:11: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, Nan::imp::IntegerFactory<v8::Integer>::return_t)’
│    25 |   obj->Set(Nan::New("p").ToLocalChecked(), Nan::New<Integer>(p));
│       |   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
│ In file included from /home/v1rtl/.cache/node-gyp/14.17.3/include/node/node.h:67,
│                  from ../../../../nan@2.14.2/node_modules/nan/nan.h:56,
│                  from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
│  3670 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
│  3673 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
│       |                                     ^~~
│ /home/v1rtl/.cache/node-gyp/14.17.3/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
│ ../src/node-boilerplate/scrypt_params_async.cc:32:17: warning: ‘v8::Local<v8::Value> Nan::Callback::Call(int, v8::Local<v8::Value>*) const’ is deprecated [-Wdeprecated-declarations]
│    32 |   callback->Call(2, argv);
│       |   ~~~~~~~~~~~~~~^~~~~~~~~
│ In file included from ../src/node-boilerplate/scrypt_params_async.cc:1:
│ ../../../../nan@2.14.2/node_modules/nan/nan.h:1742:3: note: declared here
│  1742 |   Call(int argc, v8::Local<v8::Value> argv[]) const {
│       |   ^~~~
│ make: *** [scrypt.target.mk:131: Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o] Error 1
│ make: Leaving directory '/home/v1rtl/polygon-testnet/contracts/node_modules/.pnpm/scrypt@6.0.3/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/v1rtl/n/pnpm-global/5/node_modules/.pnpm/pnpm@6.10.3/node_modules/pnpm/dist/node_modules/node-gyp/lib/build.js:194:23)
│ gyp ERR! stack     at ChildProcess.emit (events.js:375:28)
│ gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
│ gyp ERR! System Linux 5.10.52-1-MANJARO
│ gyp ERR! command "/home/v1rtl/n/bin/node" "/home/v1rtl/n/pnpm-global/5/node_modules/.pnpm/pnpm@6.10.3/node_modules/pnpm/dist/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
│ gyp ERR! cwd /home/v1rtl/polygon-testnet/contracts/node_modules/.pnpm/scrypt@6.0.3/node_modules/scrypt
│ gyp ERR! node -v v14.17.3
│ gyp ERR! node-gyp -v v8.1.0
│ gyp ERR! not ok 
└─ Failed in 3.6s
 ERROR  Command failed with exit code 1.

I have Node 14.17.3 and g++ 11.1

Also looks like scrypt is deprecated:

WARNING!!! This module is deprecated. Instead, use https://nodejs.org/api/crypto.html#crypto_crypto_scrypt_password_salt_keylen_options_callback

iamhammadaali commented 3 years ago

Did your issue solve? I'm also facing this issue.

samisbakedham commented 2 years ago

Did your issue solve? I'm also facing this issue.

Try using node 10?