Shu*_*haw 12 ubuntu node.js node-gyp ubuntu-18.04
工作中的第一个项目在 Ubuntu 上遇到了这个繁琐的错误。
\n\n目前使用node -v 13.8.0,安装了python 2.7.17,GCC 7.5.0
\n\n还检查了 node-gyp npm 页面并安装了所有 python 和 gcc 依赖项。\n这是我的 package.json 文件
\n\n "dependencies": {\n "apn": "^2.1.5",\n "async": "^1.5.2",\n "bcrypt-nodejs": "^0.0.3",\n "body-parser": "^1.15.1",\n "compression": "^1.6.2",\n "consolidate": "^0.14.5",\n "cookie-parser": "^1.4.1",\n "cors": "^2.8.4",\n "dotenv": "^2.0.0",\n "express": "^4.13.4",\n "express-validator": "^2.20.4",\n "fcm-node": "^1.2.0",\n "geocoder": "^0.2.3",\n "jimp": "^0.2.28",\n "jsonwebtoken": "^5.7.0",\n "moment": "^2.12.0",\n "moment-timezone": "^0.5.14",\n "mongoose": "^4.4.8",\n "mongoose-unique-validator": "^1.0.6",\n "morgan": "^1.7.0",\n "multer": "^1.3.0",\n "mustache": "^2.3.0",\n "node-cron": "^1.2.1",\n "node-excel-export": "^1.4.4",\n "nodemailer": "^2.3.0",\n "nodemailer-mailgun-transport": "^1.3.5",\n "nodemailer-smtp-transport": "^2.7.4",\n "qr-image": "^3.2.0",\n "randomstring": "^1.1.5",\n "request": "^2.69.0",\n "soap": "^0.23.0",\n "socket.io": "^2.0.3",\n "strong-soap": "^1.5.0",\n "swagger-jsdoc": "^1.9.3",\n "swagger-ui-express": "^1.0.7",\n "time": "^0.12.0",\n "twilio": "^3.9.1",\n "underscore": "^1.8.3",\n "uuid": "^3.2.1",\n "ws.js": "^2.0.23"\n },\n "devDependencies": {},\n "engines": {\n "node": "6.9.5"\n }\nRun Code Online (Sandbox Code Playgroud)\n\nnpm install\n\n> ursa@0.9.4 install /home/shubham/Desktop/hotel/demo_hotellife_api/node_modules/ursa\n> node-gyp rebuild\n\nmake: Entering directory \'/home/shubham/Desktop/hotel/demo_hotellife_api/node_modules/ursa/build\'\n CXX(target) Release/obj.target/ursaNative/src/ursaNative.o\nIn file included from ../../nan/nan.h:192:0,\n from ../src/ursaNative.h:10,\n from ../src/ursaNative.cc:3:\n../../nan/nan_maybe_43_inl.h: In function \xe2\x80\x98Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)\xe2\x80\x99:\n../../nan/nan_maybe_43_inl.h:112:15: error: \xe2\x80\x98class v8::Object\xe2\x80\x99 has no member named \xe2\x80\x98ForceSet\xe2\x80\x99\n return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);\n ^~~~~~~~\nIn file included from ../../nan/nan_converters.h:67:0,\n from ../../nan/nan.h:197,\n from ../src/ursaNative.h:10,\n from ../src/ursaNative.cc:3:\n../../nan/nan_converters_43_inl.h: In static member function \xe2\x80\x98static Nan::imp::ToFactoryBase<v8::Boolean>::return_t Nan::imp::ToFactory<v8::Boolean>::convert(v8::Local<v8::Value>)\xe2\x80\x99:\n../../nan/nan_converters_43_inl.h:18:69: error: no matching function for call to \xe2\x80\x98v8::Value::ToBoolean(v8::Local<v8::Context>)\xe2\x80\x99\n val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext()) \\\n ^\n../../nan/nan_converters_43_inl.h:22:1: note: in expansion of macro \xe2\x80\x98X\xe2\x80\x99\n X(Boolean)\n ^\n\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2750:44: note: candidate: v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const\n V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(\n ^~~~~~~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2750:44: note: candidate expects 1 argument, 0 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h:921:74: error: no matching function for call to \xe2\x80\x98v8::String::WriteUtf8(char*&, int, int, const int&)\xe2\x80\x99\n length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2947:7: note: candidate: int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const\n int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,\n ^~~~~~~~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2947:7: note: no known conversion for argument 1 from \xe2\x80\x98char*\xe2\x80\x99 to \xe2\x80\x98v8::Isolate*\xe2\x80\x99\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const\xe2\x80\x99:\n../../nan/nan.h:1479:5: warning: \xe2\x80\x98v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)\xe2\x80\x99 is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]\n ));\n ^\nIn file included from ../../nan/nan.h:49:0,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:180:50: note: declared here\n NODE_EXTERN v8::Local<v8::Value> MakeCallback(\n ^\n/home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:99:42: note: in definition of macro \xe2\x80\x98NODE_DEPRECATED\xe2\x80\x99\n __attribute__((deprecated(message))) declarator\n ^~~~~~~~~~\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98void Nan::AsyncWorker::SaveToPersistent(const char*, const v8::Local<v8::Value>&)\xe2\x80\x99:\n../../nan/nan.h:1533:64: error: no matching function for call to \xe2\x80\x98v8::Object::Set(v8::Local<v8::String>, const v8::Local<v8::Value>&)\xe2\x80\x99\n New(persistentHandle)->Set(New(key).ToLocalChecked(), value);\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate expects 3 arguments, 2 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate expects 3 arguments, 2 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98void Nan::AsyncWorker::SaveToPersistent(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)\xe2\x80\x99:\n../../nan/nan.h:1539:42: error: no matching function for call to \xe2\x80\x98v8::Object::Set(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)\xe2\x80\x99\n New(persistentHandle)->Set(key, value);\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate expects 3 arguments, 2 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate expects 3 arguments, 2 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98void Nan::AsyncWorker::SaveToPersistent(uint32_t, const v8::Local<v8::Value>&)\xe2\x80\x99:\n../../nan/nan.h:1545:44: error: no matching function for call to \xe2\x80\x98v8::Object::Set(uint32_t&, const v8::Local<v8::Value>&)\xe2\x80\x99\n New(persistentHandle)->Set(index, value);\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3547:37: note: candidate expects 3 arguments, 2 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate: v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3550:37: note: candidate expects 3 arguments, 2 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const char*) const\xe2\x80\x99:\n../../nan/nan.h:1551:61: error: no matching function for call to \xe2\x80\x98v8::Object::Get(v8::Local<v8::String>)\xe2\x80\x99\n New(persistentHandle)->Get(New(key).ToLocalChecked()));\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate expects 2 arguments, 1 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate expects 2 arguments, 1 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const v8::Local<v8::String>&) const\xe2\x80\x99:\n../../nan/nan.h:1557:55: error: no matching function for call to \xe2\x80\x98v8::Object::Get(const v8::Local<v8::String>&)\xe2\x80\x99\n return scope.Escape(New(persistentHandle)->Get(key));\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate expects 2 arguments, 1 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate expects 2 arguments, 1 provided\nIn file included from ../src/time.cc:5:0:\n../../nan/nan.h: In member function \xe2\x80\x98v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(uint32_t) const\xe2\x80\x99:\n../../nan/nan.h:1562:57: error: no matching function for call to \xe2\x80\x98v8::Object::Get(uint32_t&)\xe2\x80\x99\n return scope.Escape(New(persistentHandle)->Get(index));\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3594:43: note: candidate expects 2 arguments, 1 provided\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate: v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)\n V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,\n ^~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:3597:43: note: candidate expects 2 arguments, 1 provided\nIn file included from /usr/include/c++/7/cassert:44:0,\n from /home/shubham/.cache/node-gyp/13.8.0/include/node/node_object_wrap.h:26,\n from ../../nan/nan.h:51,\n from ../src/time.cc:5:\n../../nan/nan_object_wrap.h: In destructor \xe2\x80\x98virtual Nan::ObjectWrap::~ObjectWrap()\xe2\x80\x99:\n../../nan/nan_object_wrap.h:24:25: error: \xe2\x80\x98class Nan::Persistent<v8::Object>\xe2\x80\x99 has no member named \xe2\x80\x98IsNearDeath\xe2\x80\x99\n assert(persistent().IsNearDeath());\n ^\nIn file included from ../../nan/nan.h:2222:0,\n from ../src/time.cc:5:\n../../nan/nan_object_wrap.h: In member function \xe2\x80\x98void Nan::ObjectWrap::MakeWeak()\xe2\x80\x99:\n../../nan/nan_object_wrap.h:67:18: error: \xe2\x80\x98class Nan::Persistent<v8::Object>\xe2\x80\x99 has no member named \xe2\x80\x98MarkIndependent\xe2\x80\x99\n persistent().MarkIndependent();\n ^~~~~~~~~~~~~~~\nIn file included from /usr/include/c++/7/cassert:44:0,\n from /home/shubham/.cache/node-gyp/13.8.0/include/node/node_object_wrap.h:26,\n from ../../nan/nan.h:51,\n from ../src/time.cc:5:\n../../nan/nan_object_wrap.h: In static member function \xe2\x80\x98static void Nan::ObjectWrap::WeakCallback(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)\xe2\x80\x99:\n../../nan/nan_object_wrap.h:124:26: error: \xe2\x80\x98class Nan::Persistent<v8::Object>\xe2\x80\x99 has no member named \xe2\x80\x98IsNearDeath\xe2\x80\x99\n assert(wrap->handle_.IsNearDeath());\n ^\n../src/time.cc: At global scope:\n../src/time.cc:12:20: error: \xe2\x80\x98Handle\xe2\x80\x99 has not been declared\n static void Init(Handle<Object> target) {\n ^~~~~~\n../src/time.cc:12:26: error: expected \xe2\x80\x98,\xe2\x80\x99 or \xe2\x80\x98...\xe2\x80\x99 before \xe2\x80\x98<\xe2\x80\x99 token\n static void Init(Handle<Object> target) {\n ^\n../src/time.cc: In static member function \xe2\x80\x98static void Time::Init(int)\xe2\x80\x99:\n../src/time.cc:16:20: error: \xe2\x80\x98target\xe2\x80\x99 was not declared in this scope\n Nan::SetMethod(target, "time", Time_);\n ^~~~~~\n../src/time.cc:16:20: note: suggested alternative: \xe2\x80\x98tzset\xe2\x80\x99\n Nan::SetMethod(target, "time", Time_);\n ^~~~~~\n tzset\n../src/time.cc: In static member function \xe2\x80\x98static Nan::NAN_METHOD_RETURN_TYPE Time::Localtime(Nan::NAN_METHOD_ARGS_TYPE)\xe2\x80\x99:\n../src/time.cc:87:64: error: no matching function for call to \xe2\x80\x98v8::Value::IntegerValue()\xe2\x80\x99\n time_t rawtime = static_cast<time_t>(info[0]->IntegerValue());\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2774:40: note: candidate: v8::Maybe<long int> v8::Value::IntegerValue(v8::Local<v8::Context>) const\n V8_WARN_UNUSED_RESULT Maybe<int64_t> IntegerValue(\n ^~~~~~~~~~~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2774:40: note: candidate expects 1 argument, 0 provided\n../src/time.cc: In static member function \xe2\x80\x98static Nan::NAN_METHOD_RETURN_TYPE Time::Mktime(Nan::NAN_METHOD_ARGS_TYPE)\xe2\x80\x99:\n../src/time.cc:141:103: error: no matching function for call to \xe2\x80\x98v8::Value::Int32Value()\xe2\x80\x99\n tmstr.tm_sec = Nan::Get(arg, Nan::New("seconds").ToLocalChecked()).ToLocalChecked()->Int32Value();\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2778:40: note: candidate: v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const\n V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;\n ^~~~~~~~~~\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2778:40: note: candidate expects 1 argument, 0 provided\n../src/time.cc:142:103: error: no matching function for call to \xe2\x80\x98v8::Value::Int32Value()\xe2\x80\x99\n tmstr.tm_min = Nan::Get(arg, Nan::New("minutes").ToLocalChecked()).ToLocalChecked()->Int32Value();\n ^\nIn file included from /home/shubham/.cache/node-gyp/13.8.0/include/node/node.h:63:0,\n from ../../nan/nan.h:49,\n from ../src/time.cc:5:\n/home/shubham/.cache/node-gyp/13.8.0/include/node/v8.h:2778:40: note:
这对我有用
npm install -g npm-check-updates
npm-check-updates -u
npm install
Run Code Online (Sandbox Code Playgroud)
小智 5
您遇到的问题是time包已过时https://www.npmjs.com/package/time。
根据您使用该包的原因,有一些不同的解决方案,您可以使用不同的库/包来处理日期和时间,但您可能需要重构一些代码。
尝试从package.json中删除此依赖项,"time": "^0.12.0"然后再次运行npm install以查看它是否正确运行。
然后更改依赖项以使用更新的分支,time例如
https://github.com/riyadshauk/node-time。您time对package.json 的依赖应该如下所示
"dependencies": {
"time": "github:riyadshauk/node-time"
}
Run Code Online (Sandbox Code Playgroud)
您的完整依赖项应该是这样的(假设自您提出问题以来您没有安装/删除任何内容),唯一的更改是 on time,其余部分是相同的。我用的是节点v13.7.0
"dependencies": {
"apn": "^2.1.5",
"async": "^1.5.2",
"bcrypt-nodejs": "^0.0.3",
"body-parser": "^1.15.1",
"compression": "^1.6.2",
"consolidate": "^0.14.5",
"cookie-parser": "^1.4.1",
"cors": "^2.8.4",
"dotenv": "^2.0.0",
"express": "^4.13.4",
"express-validator": "^2.20.4",
"fcm-node": "^1.2.0",
"geocoder": "^0.2.3",
"jimp": "^0.2.28",
"jsonwebtoken": "^5.7.0",
"moment": "^2.12.0",
"moment-timezone": "^0.5.14",
"mongoose": "^4.4.8",
"mongoose-unique-validator": "^1.0.6",
"morgan": "^1.7.0",
"multer": "^1.3.0",
"mustache": "^2.3.0",
"node-cron": "^1.2.1",
"node-excel-export": "^1.4.4",
"nodemailer": "^2.3.0",
"nodemailer-mailgun-transport": "^1.3.5",
"nodemailer-smtp-transport": "^2.7.4",
"qr-image": "^3.2.0",
"randomstring": "^1.1.5",
"request": "^2.69.0",
"soap": "^0.23.0",
"socket.io": "^2.0.3",
"strong-soap": "^1.5.0",
"swagger-jsdoc": "^1.9.3",
"swagger-ui-express": "^1.0.7",
"time": "github:riyadshauk/node-time",
"twilio": "^3.9.1",
"underscore": "^1.8.3",
"uuid": "^3.2.1",
"ws.js": "^2.0.23"
}
Run Code Online (Sandbox Code Playgroud)