GYP ERR! 构建错误。堆栈错误:'make' 失败,退出码为 2。

136

我目前正在开发一个基于Node.js的Web应用程序,但在使用Cloud Foundry将其部署到线上时遇到了问题。通过调查错误信息,发现可能是一些安装的软件包之间存在冲突。

这是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>"
  }
}

当我尝试通过Cloud Foundry推送应用程序时,遇到了这个错误。在删除node_modules文件夹的所有内容后,运行npm install也会出现类似的错误。

../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

有其他人遇到过这个问题吗,或者知道如何解决吗?


2
每当您遇到此类错误时,在控制台中,实际 错误将出现在您当前发布的这些行 之前 - mscdex
1
@mscdex 我添加了出现错误前的代码行。 - Michael Vaquier
切换到Node v6会有帮助吗? - opiethehokie
@opiethehokie,要执行此操作的命令是什么?在我看来,bufferutil 经常出现,有人知道它是什么吗? - Michael Vaquier
你使用的编译器和编译器版本是什么? - mscdex
在Mac OS Catalina上,降级到Node 10.x解决了我的问题。 - kolistivra
20个回答

161

删除 package-lock.json 文件并重新运行 npm install 命令后,问题得到解决。

如果您使用 yarn 构建程序,删除 yarn.lock 文件并重新运行 yarn install 命令。


171
我讨厌这成为解决方案时。 - Paul Razvan Berg
2
这对我有效。在我的情况下,我必须删除yarn.lock文件。 - Rishi Vedpathak
如果你使用yarn进行构建而不是npm,是的,我会更新我的答案。谢谢。 - noone
7
@PaulRazvanBerg 当这不是解决方案时,我更加讨厌它。 - Andor Németh
1
天啊,简单到我都不敢相信!! - faniva
显示剩余4条评论

48

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

Ubuntu / Debian:

apt-get install -y build-essential

CentOS:

yum install gcc gcc-c++ make 

Fedora 23及以上版本:

dnf install @development-tools

苹果操作系统:

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

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


3
如何在Mac上完成这个操作? - John
目前我正在尝试这个...不是很喜欢Homebrew或Ruby,但如果它能正常工作... https://docs.macstadium.com/docs/install-osx-build-tools - John
Xcode已安装。我正在运行MacOS 11.4 - 我想知道在解决这个问题之前是否必须更新系统。不幸的是,我的互联网速度很慢,而且下载需要8GB - 下载1或2 GB后总是失败,然后又要从头开始。有没有什么想法,这对使其正常工作是否至关重要? - John
@John 我不认为你需要更新macOS。你是否也安装了Xcode命令行工具? - piscator
就是这样,两天后我偶然到了这里。Ubuntu 22.04.1的问题解决了(在三台不同的机器上都采用了相同的解决方案)。 - Marcelo Scofano Diniz
已解决我的Ubuntu 22.04问题。 - Pouya Samie

25

这是一个早已存在但一直不断的问题,已在https://github.com/nodejs/node-gyp/issues/809上有详细记录。

对我来说,错误提示了版本号,例如:

gyp ERR! System Darwin 17.7.0
gyp ERR! node -v v12.1.0
gyp ERR! node-gyp -v v3.8.0

尝试了所有可能的解决方案(修改~/.npmrc,删除~/.node-gyp,清除npm缓存,删除node_modules甚至重启系统),我成功的方法是降级node。

我认为日志中提到的nodenode-gyp的版本不兼容。所以我回退到一个旧的node版本,这个版本完美地解决了问题。

npm install -g node@11.10.0

应该有清晰的文档描述两者之间的不兼容变化和兼容性问题。


3
这就是我寻找了三天的答案!!虽然我遇到的问题是在 Docker 容器内(而不是在主机上),但听起来我走过了和你一样的路 - 尝试重新安装 node,清除缓存等。对我来说,基于 node:current-alpine 的容器是错误的选择(当前版本为 16)。将其更改为 node:12.2.0-alpine 解决了我的问题,并允许 npm install 完成。我猜测我解决问题的根本原因和你一样 - 较旧的 Docker 容器实际上降级了 node 版本。 - cartbeforehorse
1
如何检查特定版本的 node-gyp 是否与特定版本的 node 兼容? - Paul Razvan Berg
1
这对我有用。答案的附加资源:(1)https://dev59.com/XVYN5IYBdhLWcg3wuaJx(2)https://nodejs.org/en/download/releases/ - Blues Clues
2
我从 Node 的 16 版本降级到了 14 版本,问题就解决了。 - mashgreat

23

问题已经解决。一些npm包没有更新到最新版本。我修改了package.json来安装所有软件包的最新版本,错误得以解决。


9
如何做到这一点? - yas17
4
如何检查库的对等依赖并安全地更新? - Anand S
你可以尝试使用yarn-check包,它非常有帮助。 - 0xFK
如果那不是一个选项呢? - Anshuman Kumar
那就不是一个选择。 - OutOfThisPlanet

15

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

在我的情况下,服务节点版本在我的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)
  },

我希望这能帮助到某些人。


1
这对我解决了问题。将 Node 10 降级为 Node 8 并在本地运行我的仓库。 - Ruben Murray
我在我的package.json中没有类似于"engines": { "node": "7.10.2" }的东西。我无法确定它认为自己是哪个版本的Node。 - John

15

在我的情况下,是因为node-sass(版本<6.0.1)不支持Node 16导致的。将node-sass更新到6.0.1,问题得以解决。请参见错误:命名空间'std'中没有名为'remove_cv_t'的模板;你是否指的是'remove_cv'?

从我的经验中可以学到一点,那就是你应该仔细阅读错误信息并查找“根本原因消息”。在我的情况下,它是错误:命名空间'std'中没有名为'remove_cv_t'的模板;你是否指的是'remove_cv'?。它显示在GYP ERR!构建错误。堆栈错误:'make'退出代码为2行的正上方。


9

删除 ~/.node-gyp 文件夹和 ~/.npmrc 文件。

重新启动服务器并在项目文件夹中重新运行 npm install。

编辑:

警告:删除 ~/.npmrc 将删除其他配置。


3
警告:删除~/.npmrc将删除其他配置,例如默认作者名称。 - Paul Razvan Berg

4
在 Linux 中,可以通过安装“构建必备”来解决此问题。 sudo apt-get install build-essential 但在我的 Windows wsl2 上,仅安装“构建必备”无法解决该问题,我必须将 Node 降级到 16.15.0,然后问题得到解决。

4

我认为删除此目录并清除 npm 的缓存更好:

rm -rf ~/.node-gyp/
rm -r node_modules/.bin/;
rm -r build/
npm cache clean

您可以进行测试

npm install -g node-gyp

and

npm install -g node-pre-gyp

最后:

npm install <your module>

3

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接