GYP ERR! build error. stack Error: 'make' failed with exit code 2
GYP ERR! build error. stack Error: 'make' failed with exit code 2
我目前正在开发一个 nodejs 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
有没有其他人遇到过这个问题,或者知道如何解决它?
解决了问题。一些 npm 包不是最新的。我修改了 package.json 以安装所有软件包的所有最新版本,错误已修复。
删除 ~/.node-gyp 文件夹,然后删除 ~/.npmrc 文件。
重新启动服务器并在项目文件夹中重新运行 npm install
编辑:
警告:删除 ~/.npmrc 将删除您的其他配置
对于遇到这个确切问题的其他人:
在我的例子中,服务器节点版本在我的 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)
},
我希望这对某人有所帮助。
如果您使用的是 NVM,您还可以更改为您的软件包支持的版本,例如:
nvm install 7.10.2
nvm use 7.10.2
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
这是一个古老但一致的问题,在以下位置有详细记录: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
和 node-gyp
的日志中提到的版本不兼容。所以我恢复到一个旧的节点版本,它工作得很好。
npm install -g node@11.10.0
应该有一个清晰的文档来描述两者之间的重大变化和兼容性问题。
我在安装gazebo gzweb 时遇到了同样的问题。我发现 apt install nodejs
在“/usr/bin/”的方向安装 "node"。你可以通过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 npm@6.9.0 -g
ln -s /usr/local/bin/npm /usr/bin/npm
我认为删除此目录并清理 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>
在我们的案例中(因为 make
失败),这个问题可以通过 安装构建/开发工具 来解决:
Ubuntu / Debian:
apt-get install -y build-essential
CentOS:
yum install gcc gcc-c++ make
Fedora 23 及以上版本:
dnf install @development-tools
如果这不是解决方案,您可能想尝试升级或降级节点,删除 package-lock.json
和 node_modules
文件夹,然后重新 运行 npm install
.
CentOS 6 用户
节点 10+ 需要 GCC4.9。显然 CentOS 6 没有它。您可以在 npm install 之前使用这些命令作为解决方法(使用 Node 11 NPM 6 测试)。
yum install devtoolset-7
source scl_source enable devtoolset-7
按照以下步骤解决问题。
- 确保您安装了构建工具。
- 更新 node-gyp
- 删除包-lock.json 和节点模块文件夹并运行 npm 重新安装。
- 删除 ~/.node-gyp 文件夹并 运行 npm 再次安装。
我正在开发 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
我在构建基于 node:alipine
的图像时遇到了这个问题。
由于我的 Docker 文件没有指定版本,所以使用的是最新版本,即 3 天前在 Docker Hub 发布的 Node 16。
将其降级为 15 (node:15-alpine
) 解决了问题。
如果您在 2021 年 12 月 16 日之后阅读本文,您可能会看到由于 Heroku 节点版本升级问题导致的构建错误。
根据 Heroku 变更日志:
Ruby apps now default to Node version 16.13.1 and Yarn version 1.22.17
Change effective on 16 December 2021
Applications using the heroku/ruby buildpack that do not have a
version of Node installed by another buildpack (such as the
heroku/nodejs buildpack) will now receive:
Node version 16.13.1 (was previously 12.16.2) Yarn version 1.22.17
(was previously 1.22.4)
https://devcenter.heroku.com/changelog-items/2306
我的情况是 node-sass(版本 < 6.0.1)不支持 Node 16。将 node-sass 更新到 6.0.1,问题就解决了。参见 error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?。
根据我的经验,您应该非常仔细地阅读错误消息并搜索“根本原因消息”。在我的例子中是 error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?
。它显示在 GYP ERR! build error. stack Error: 'make' failed with exit code 2
行的正上方。
我有同样的错误,对我来说解决方案是降级节点版本。
在Linux中,通过安装 build essential 修复
sudo apt-get install build-essential
但在我的 Windows wsl2
仅安装 build-essential 并没有解决问题,
我必须将节点降级到 16.15.0 然后它得到解决。
我目前正在开发一个 nodejs 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
有没有其他人遇到过这个问题,或者知道如何解决它?
解决了问题。一些 npm 包不是最新的。我修改了 package.json 以安装所有软件包的所有最新版本,错误已修复。
删除 ~/.node-gyp 文件夹,然后删除 ~/.npmrc 文件。
重新启动服务器并在项目文件夹中重新运行 npm install
编辑:
警告:删除 ~/.npmrc 将删除您的其他配置
对于遇到这个确切问题的其他人:
在我的例子中,服务器节点版本在我的 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)
},
我希望这对某人有所帮助。
如果您使用的是 NVM,您还可以更改为您的软件包支持的版本,例如:
nvm install 7.10.2
nvm use 7.10.2
It worked after deleting
package-lock.json
and re runnpm install
If you are using yarn to build your program delete
yarn.lock
and re runyarn install
这是一个古老但一致的问题,在以下位置有详细记录: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
和 node-gyp
的日志中提到的版本不兼容。所以我恢复到一个旧的节点版本,它工作得很好。
npm install -g node@11.10.0
应该有一个清晰的文档来描述两者之间的重大变化和兼容性问题。
我在安装gazebo gzweb 时遇到了同样的问题。我发现 apt install nodejs
在“/usr/bin/”的方向安装 "node"。你可以通过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 npm@6.9.0 -g
ln -s /usr/local/bin/npm /usr/bin/npm
我认为删除此目录并清理 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>
在我们的案例中(因为 make
失败),这个问题可以通过 安装构建/开发工具 来解决:
Ubuntu / Debian:
apt-get install -y build-essential
CentOS:
yum install gcc gcc-c++ make
Fedora 23 及以上版本:
dnf install @development-tools
如果这不是解决方案,您可能想尝试升级或降级节点,删除 package-lock.json
和 node_modules
文件夹,然后重新 运行 npm install
.
CentOS 6 用户
节点 10+ 需要 GCC4.9。显然 CentOS 6 没有它。您可以在 npm install 之前使用这些命令作为解决方法(使用 Node 11 NPM 6 测试)。
yum install devtoolset-7
source scl_source enable devtoolset-7
按照以下步骤解决问题。
- 确保您安装了构建工具。
- 更新 node-gyp
- 删除包-lock.json 和节点模块文件夹并运行 npm 重新安装。
- 删除 ~/.node-gyp 文件夹并 运行 npm 再次安装。
我正在开发 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
我在构建基于 node:alipine
的图像时遇到了这个问题。
由于我的 Docker 文件没有指定版本,所以使用的是最新版本,即 3 天前在 Docker Hub 发布的 Node 16。
将其降级为 15 (node:15-alpine
) 解决了问题。
如果您在 2021 年 12 月 16 日之后阅读本文,您可能会看到由于 Heroku 节点版本升级问题导致的构建错误。
根据 Heroku 变更日志:
Ruby apps now default to Node version 16.13.1 and Yarn version 1.22.17 Change effective on 16 December 2021
Applications using the heroku/ruby buildpack that do not have a version of Node installed by another buildpack (such as the heroku/nodejs buildpack) will now receive:
Node version 16.13.1 (was previously 12.16.2) Yarn version 1.22.17 (was previously 1.22.4)
https://devcenter.heroku.com/changelog-items/2306
我的情况是 node-sass(版本 < 6.0.1)不支持 Node 16。将 node-sass 更新到 6.0.1,问题就解决了。参见 error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?。
根据我的经验,您应该非常仔细地阅读错误消息并搜索“根本原因消息”。在我的例子中是 error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?
。它显示在 GYP ERR! build error. stack Error: 'make' failed with exit code 2
行的正上方。
我有同样的错误,对我来说解决方案是降级节点版本。
在Linux中,通过安装 build essential 修复
sudo apt-get install build-essential
但在我的 Windows wsl2
仅安装 build-essential 并没有解决问题,
我必须将节点降级到 16.15.0 然后它得到解决。