私は現在、nodejs Webアプリケーションに取り組んでいます。クラウドファウンドリを使用してオンラインでアプリケーションをプッシュできません。エラーについていくつか調査しましたが、インストールされているパッケージの一部が競合しているようです。
これはpackage.jsonファイルです。
{
"dependencies": {
"c3": "^0.4.12",
"cfenv": "1.0.0",
"cloudant": "^1.8.0",
"dygraphs": "^2.0.0",
"express": "4.5.1",
"getmac": "1.0.6",
"http": "0.0.0",
"mqtt": "1.0.5",
"properties": "1.2.1",
"save": "^2.3.0",
"sockjs": "0.3.9",
"websocket-multiplex": "0.1.x"
},
"description": "description.",
"license": "UNLICENSED",
"main": "app.js",
"repository": {
"type": "git",
"url": "<gitUrl>"
}
}
これは、クラウドファウンドリを介してアプリケーションをプッシュしようとしたときに発生するエラーです。 node_modulesフォルダーのすべてのコンテンツを削除した後にnpmをインストールすると、このようなエラーが発生します。
../src/bufferutil.cc:32:50: error: call of overloaded 'NODE_SET_METHOD(v8::Local<v8::FunctionTemplate>&, const char [6], void (&)(const v8::FunctionCallbackInfo<v8::Value>&))' is ambiguous
NODE_SET_METHOD(t, "merge", BufferUtil::Merge);
../src/bufferutil.cc:32:50: note: candidates are:
In file included from ../src/bufferutil.cc:8:0:
/root/.node-gyp/8.0.0/include/node/node.h:257:13: note: void node::NODE_SET_METHOD(v8::Local<v8::Template>, const char*, v8::FunctionCallback)
inline void NODE_SET_METHOD(v8::Local<v8::Template> recv,
^
/root/.node-gyp/8.0.0/include/node/node.h:270:13: note: void node::NODE_SET_METHOD(v8::Local<v8::Object>, const char*, v8::FunctionCallback)
inline void NODE_SET_METHOD(v8::Local<v8::Object> recv,
^
bufferutil.target.mk:95: recipe for target 'Release/obj.target/bufferutil/src/bufferutil.o' failed
make: *** [Release/obj.target/bufferutil/src/bufferutil.o] Error 1
make: Leaving directory '/home/WibiSmart-Bluemix-App/node_modules/bufferutil/build'
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:285:23)
gyp ERR! stack at emitTwo (events.js:125:13)
gyp ERR! stack at ChildProcess.emit (events.js:213:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:197:12)
gyp ERR! System Linux 4.4.30-ti-r64
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/WibiSmart-Bluemix-App/node_modules/bufferutil
gyp ERR! node -v v8.0.0
gyp ERR! node-gyp -v v3.6.1
gyp ERR! not ok
他の誰かがこの問題に遭遇しましたか、それを修正する方法を知っていますか?
問題を理解しました。一部のnpmパッケージは最新ではありませんでした。すべてのパッケージの最新バージョンをすべてインストールするようにpackage.jsonを変更し、エラーを修正しました。
〜/ .node-gypフォルダーを削除してから、〜/ .npmrcファイルを削除します。
サーバーを再起動し、プロジェクトフォルダーでnpm installを再実行します
この正確な問題に遭遇した他の人々のために:
私の場合、サーバーノードのバージョンは、私のpackage.jsonファイルで、ローカル環境が実行しているバージョンよりも古いバージョンに設定されていました。ローカルで実行しているものを確認してください:
node --version
-> 8.11.3
次に、package.jsonのサーバー設定を確認します。
{
"name": "myapp",
"version": "0.0.0",
"private": true,
"engines": {
"node": "7.10.2" // <-- This is too old, set it to the node version you are running locally (8.11.3)
},
これが誰かの役に立つことを願っています。
私はこのディレクトリを削除してnpm
のキャッシュをきれいにする方が良いと思います:
rm -rf ~/.node-gyp/
rm -r node_modules/.bin/;
rm -r build/
npm cache clean
そしてあなたはテストすることができます
npm install -g node-gyp
そして
npm install -g node-pre-gyp
最終的に:
npm install <your module>
ノード10+にはGCC4.9が必要です。そしてどうやらCentOS 6はそれを持っていない。 npmをインストールする前にこれらのコマンドを回避策として使用できます(Node 11 NPM 6でテスト済み)。
yum install devtoolset-7
source scl_source enable devtoolset-7
ガゼボgzwebをインストールすると、同じ問題が発生しました。 apt install nodejs
が「/ usr/bin /」の方向に「ノード」をインストールしていることがわかりました。 which node
で確認できます。しかし、node -v
はまだ「/ usr/local/bin/node」を参照していますが、これはアンインストールに失敗した間違ったバージョンです。したがって、私の解決策として:
rm -rf /usr/local/bin/node
cp -i /usr/bin/node /usr/local/bin/
cp -i /usr/bin/nodejs /usr/local/bin/
手順:
Sudo apt-get install npm npm install -g n n stable npm install [email protected] -g ln -s /usr/local/bin/npm /usr/bin/npm
[〜#〜] nmv [〜#〜] を使用している場合は、次のようにパッケージサポートのバージョンを変更することもできます。
nvm install 7.10.2
nvm use 7.10.2