可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am currently working on a nodejs web application I am having trouble pushing the application online with cloud foundry. I did some research on the errors and it seems that maybe some of the packages being installed have some conflicts.
This is the package.json file.
{
"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>"
}
}
This is the error I encounter when I try to push the application via cloud foundry. This similar error happens when I npm install after deleting all the content of the node_modules folder.
../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
Did anyone else encounter this issue, or knows how to fix it?
回答1:
It worked after deleting package-lock.json
and re run npm
install
If you are using yarn to build your program delete yarn.lock
and
re run yarn install
回答2:
Figured out the issue. Some of the npm packages were not up to date. I modified the package.json to install all the latest versions of all packages and the error was fixed.
回答3:
Delete the ~/.node-gyp folder and then the ~/.npmrc file.
Reboot your server and rerun npm install in your project folder
Edit:
Warning: removing ~/.npmrc will delete your other configurations
回答4:
For other people that stumble into this exact problem:
In my case, the server node version was set to an older version in my package.json file than what my local environment was running.
So check what you are running locally with:
node --version
-> 8.11.3
Then look at your server setting in your 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)
},
I hope this helps someone.
回答5:
In our case (since make
failed), this issue could be resolved by installing the build / development tools:
Ubuntu / Debian:
apt-get install -y build-essential
CentOS:
yum install gcc gcc-c++ make
Fedora 23 and above:
dnf install @development-tools
If this is not the solution, you might want to try to upgrade or downgrade node, remove package-lock.json
and the node_modules
folder, and then re-run npm install
.
回答6:
This has been old yet consistent issue well documented at: https://github.com/nodejs/node-gyp/issues/809
For me the error mentioned the version numbers like:
gyp ERR! System Darwin 17.7.0
gyp ERR! node -v v12.1.0
gyp ERR! node-gyp -v v3.8.0
After attempting all the possible combinations of solutions (modify ~/.npmrc
, remove ~/.node-gyp
, clear the npm cache, delete node_modules
and even restart the system), what worked with me was downgrading the node.
I believe the versions mentioned in the log for node
and node-gyp
are incompatible. So I reverted to an older node version which worked like a charm.
npm install -g node@11.10.0
There should be a clear documentation describing breaking changes and compatibility issues between the two.
回答7:
I think delete this directory and clean the cache of npm
is better:
rm -rf ~/.node-gyp/
rm -r node_modules/.bin/;
rm -r build/
npm cache clean
and you can test
npm install -g node-gyp
and
npm install -g node-pre-gyp
finally:
npm install <your module>
回答8:
If you are using NMV, you can also change to version your package support, like:
nvm install 7.10.2
nvm use 7.10.2
回答9:
I got the same problem when installed the gazebo gzweb. I found out that apt install nodejs
install the "node" in the direction of "/usr/bin/". You can verify by which node
. But node -v
is still referring to "/usr/local/bin/node" which is a wrong version I failed to uninstall.
Thus as my solution:
rm -rf /usr/local/bin/node
cp -i /usr/bin/node /usr/local/bin/
cp -i /usr/bin/nodejs /usr/local/bin/
Steps:
sudo apt-get install npm
npm install -g n
n stable
npm install npm@6.9.0 -g
ln -s /usr/local/bin/npm /usr/bin/npm
回答10:
CentOS 6 users
Node 10+ requires GCC4.9. And apparently CentOS 6 doesn't have it. You can use these commands before npm install as a workaround (tested with Node 11 NPM 6).
yum install devtoolset-7
source scl_source enable devtoolset-7
Source: https://github.com/lovell/sharp/issues/1283