Mac环境npm install时node-gyp编译失败问题求助
解决MacOS Monterey下Vue遗留项目npm install的node-gyp编译错误
错误日志
npm ERR! 1 error generated. npm ERR! make: *** [Release/obj.target/binding/src/binding.o] Error 1 npm ERR! gyp ERR! build error npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2 npm ERR! gyp ERR! stack at ChildProcess.onExit (/Users/username/Desktop/Work/Projects/project_name/node_modules/node-gyp/lib/build.js:262:23) npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:365:28) npm ERR! gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12) npm ERR! gyp ERR! System Darwin 21.6.0 npm ERR! gyp ERR! command "/usr/local/bin/node" "/Users/username/Desktop/Work/Projects/project_name/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" npm ERR! gyp ERR! cwd /Users/username/Desktop/Work/Projects/project_name/node_modules/node-sass npm ERR! gyp ERR! node -v v16.0.0 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1
环境信息
- 操作系统:MacOS Monterey
- Node版本:v16.0.0
- npm版本:7.10.0
- Python版本:2.7.18
项目package.json内容
{ "name": "my-app-client", "dependencies": { "@gtm-support/vue2-gtm": "^1.3.0", "axios": "^0.18.1", "cross-env": "^5.2.0", "cryptr": "^4.0.1", "es6-promise": "^4.2.4", "https": "^1.0.0", "underscore": "^1.9.1", "vue": "^2.5.2", "vue-cookies": "^1.5.4", "vue-i18n": "^8.0.0", "vue-recaptcha": "^1.1.1", "vue-router": "^3.0.1", "vue-scrollto": "^2.17.1", "vue-session": "^1.0.0", "vuex": "^3.0.1" }, "devDependencies": { "autoprefixer": "^7.1.2", "babel-core": "^6.22.1", "babel-eslint": "^7.2.3", "babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-loader": "^7.1.1", "babel-plugin-syntax-jsx": "^6.18.0", "babel-plugin-transform-runtime": "^6.22.0", "babel-plugin-transform-vue-jsx": "^3.5.0", "babel-preset-env": "^1.3.2", "babel-preset-stage-2": "^6.22.0", "chalk": "^2.0.1", "copy-webpack-plugin": "^4.0.1", "css-loader": "^0.28.0", "dotenv-webpack": "^4.0.0", "eslint": "^4.15.0", "eslint-config-standard": "^10.2.1", "eslint-friendly-formatter": "^3.0.0", "eslint-loader": "^1.7.1", "eslint-plugin-import": "^2.7.0", "eslint-plugin-node": "^5.2.0", "eslint-plugin-promise": "^3.4.0", "eslint-plugin-standard": "^3.0.1", "eslint-plugin-vue": "^4.0.0", "eventsource-polyfill": "^0.9.6", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^1.1.4", "friendly-errors-webpack-plugin": "^1.6.1", "html-webpack-plugin": "^2.30.1", "less": "^3.0.1", "less-loader": "~4.1.0", "node-notifier": "^5.1.2", "node-sass": "^4.7.2", "nodemon": "^1.15.1", "optimize-css-assets-webpack-plugin": "^3.2.0", "ora": "^1.2.0", "portfinder": "^1.0.13", "postcss-import": "^11.0.0", "postcss-loader": "^2.0.8", "postcss-url": "^7.2.1", "rimraf": "^2.6.0", "sass-loader": "^6.0.7", "semver": "^5.3.0", "shelljs": "^0.7.6", "uglifyjs-webpack-plugin": "^1.1.1", "url-loader": "^0.5.8", "vue-loader": "^13.3.0", "vue-style-loader": "^3.0.1", "vue-template-compiler": "^2.5.2", "webpack": "^3.6.0", "webpack-bundle-analyzer": "^2.9.0", "webpack-dev-server": "^2.9.1", "webpack-hot-middleware": "^2.22.3", "webpack-merge": "^4.1.0" }, "engines": { "node": ">= 8.0.0", "npm": ">= 3.0.0" }, "browserslist": [ "> 1%", "last 2 versions", "not ie <= 8" ] }
解决方案
方案1:降级Node版本到兼容范围(推荐)
node-sass@4.7.2仅支持Node.js 4.x-10.x,当前Node16版本过高是核心冲突原因:
- 若未安装nvm,先通过Homebrew安装:
安装完成后,根据终端提示在brew install nvm~/.zshrc或~/.bashrc中配置环境变量,重启终端生效。 - 安装并切换到Node10.24.1(10系列最后稳定版):
nvm install 10.24.1 nvm use 10.24.1 - 删除原有依赖文件:
rm -rf node_modules package-lock.json - 重新执行安装:
npm install
方案2:强制使用node-sass预编译二进制包,跳过本地编译
通过指定镜像获取预编译好的二进制文件,避免本地编译失败:
- 设置npm镜像:
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ - 删除原有依赖文件后重新安装:
rm -rf node_modules package-lock.json npm install
方案3:配置MacOS编译环境,修复node-gyp构建问题
若坚持使用Node16,需更新node-gyp并配置编译环境:
- 确保Xcode命令行工具正确安装:
xcode-select --install # 若已安装仍报错,重置工具路径 xcode-select --reset - 更新全局node-gyp版本:
npm install -g node-gyp - 配置node-gyp使用Python2.7:
npm config set python python2.7 - 指定clang编译器:
export CC=clang export CXX=clang++ - 删除原有依赖文件后重新安装:
rm -rf node_modules package-lock.json npm install
方案4:替换node-sass为dart-sass(需修改项目依赖)
若允许调整依赖版本,用dart-sass替代旧版node-sass可彻底避免编译问题:
- 修改package.json:
- 将
node-sass: "^4.7.2"替换为sass: "^1.32.0" - 将
sass-loader: "^6.0.7"升级为sass-loader: "^10.1.1"
- 将
- 删除原有依赖文件后重新安装:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

