GYP ERR!构建错误。堆栈错误:' make'退出代码2

时间:2017-06-01 19:54:53

标签: node.js npm ibm-cloud cloudfoundry gyp

我目前正在开发一个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

是否有其他人遇到过这个问题,或者知道如何修复它?

13 个答案:

答案 0 :(得分:8)

在我们的情况下(由于make失败),可以通过安装构建/开发工具来解决此问题:

Ubuntu / Debian:

apt-get install -y build-essential

CentOS:

yum install gcc gcc-c++ make 

Fedora 23及更高版本:

dnf install @development-tools

如果这不是解决方案,则可能要尝试升级或降级节点,删除package-lock.jsonnode_modules文件夹,然后重新运行npm install

答案 1 :(得分:5)

找出问题所在。一些npm软件包不是最新的。我修改了package.json以安装所有软件包的所有最新版本,并修复了错误。

答案 2 :(得分:4)

删除〜/ .node-gyp文件夹,然后删除〜/ .npmrc文件。

重新启动服务器,然后在项目文件夹中重新运行npm install

答案 3 :(得分:4)

删除 package-lock.json并重新运行npm install

后,此方法有效

答案 4 :(得分:2)

对于遇到这个确切问题的其他人:

在我的情况下,我的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)
  },

我希望这对某人有帮助。

答案 5 :(得分:1)

这是一个古老而始终如一的问题,已在https://github.com/nodejs/node-gyp/issues/809

中有详细记录

对于我来说,错误提到的版本号如下:

Click at blue line:
<svg class="chart" id="svgCh" onclick="changeStart(event)">    
  <circle cx="0" cy="-1" r="0.05" style="fill: rgba(255,0,0,1)" id="point"></circle>
  <polyline id="chart" fill="none" stroke="#0074d9" stroke-width="0.01" points=""/>
  <text x="0.03" y="0.9" class="axis">0</text>
  <text x="0.03" y="0.2" class="axis">1</text>
  <text x="4.8" y="0.9" class="axis" id="time"></text>
</svg><br>

尝试了所有可能的解决方案组合(修改gyp ERR! System Darwin 17.7.0 gyp ERR! node -v v12.1.0 gyp ERR! node-gyp -v v3.8.0 ,删除~/.npmrc,清除npm缓存,删除~/.node-gyp甚至重新启动系统)之后,我的工作方式已降级节点。

我认为node_modulesnode的日志中提到的版本不兼容。因此,我恢复到了旧版本的节点,该版本的工作原理很像魅力。

node-gyp

应该有清晰的文档来描述两者之间的重大更改和兼容性问题。

答案 6 :(得分:0)

如果您使用的是NMV,还可以更改软件包支持的版本,例如:

nvm install 7.10.2
nvm use 7.10.2

答案 7 :(得分:0)

安装凉亭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/

enter image description here

答案 8 :(得分:0)

我认为删除该目录并清理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>

答案 9 :(得分:0)

CentOS 6用户

节点10+需要GCC4.9。而且显然CentOS 6没有它。您可以在npm安装之前使用这些命令作为解决方法(已通过Node 11 NPM 6测试)。

yum install devtoolset-7
source scl_source enable devtoolset-7

来源:https://github.com/lovell/sharp/issues/1283

答案 10 :(得分:0)

请按照以下步骤解决问题。

  • 确保已安装构建工具。
  • 更新node-gyp
  • 删除package-lock.json和节点模块文件夹,然后再次运行npm install。
  • 删除〜/ .node-gyp文件夹,然后再次运行npm install。

来源:https://codeforgeek.com/make-failed-with-exit-code-2/

答案 11 :(得分:0)

我在 Ubuntu 20.04 上工作。我尝试了这里提到的所有解决方案,但没有任何效果。实际问题是版本差异。我确信相同的 package.json 将在您的队友的其中一台本地机器上正常工作。您只需要询问您的团队成员他们使用的是哪个 npm 和 node 版本,然后将其安装在您的本地机器上即可。

要安装特定版本的 npm:

sudo npm install -g npm@specific_npm_version_here

安装特定版本的节点:

sudo npm install -g n
sudo n specify_node_version_here

答案 12 :(得分:0)

我在基于 node:alipine 构建映像时遇到了这个问题。

由于我的 Dockerfile 没有指定版本,所以使用了最新的,是 3 天前在 Docker Hub 发布的 Node 16。

将其降级到 15 (node:15-alpine) 解决了问题。