Mac升级Angular v4.4.6到v14报xcodebuild requires Xcode错误如何解决
Angular跨版本升级执行ng update时报Xcode/node-gyp错误修复方案
问题根因
报错由两个独立问题共同触发:
- 系统
xcode-select默认指向独立Command Line Tools目录,未关联已安装的完整Xcode,直接触发xcodebuild调用报错 - 当前使用的Node 8.9.4内置
node-gyp@3.6.2版本过旧,无法识别新版macOS(当前运行环境为Darwin 21.x即Monterey及以上版本)的Xcode版本输出格式,正则匹配失败抛出AttributeError
修复步骤
按顺序执行以下操作:
- 修正Xcode开发者目录指向
执行以下命令将xcode-select关联到完整Xcode路径,默认Xcode安装路径如下,若自定义了安装位置替换成实际路径即可:
命令执行完成后,接受Xcode许可协议避免后续权限拦截:sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
验证配置是否生效,执行sudo xcodebuild -license acceptxcodebuild -version,如果能正常输出Xcode版本、构建号,没有报错就说明配置正确。 - 跳过非必要依赖编译执行升级
报错的编译目标是fsevents,属于Angular CLI的可选文件监听依赖,升级流程本身不需要该依赖,可以通过环境变量跳过可选依赖的脚本执行,直接运行升级命令:
如果还是报node-gyp相关错误,可以临时给当前Node 8环境升级兼容的node-gyp版本:npm_config_ignore_optional=true NG_DISABLE_VERSION_CHECK=1 npx @angular/cli@6.2.9 update @angular/cli@6.2.9 --loglevel verbose
安装完成后重新执行升级命令即可。npm install -g node-gyp@5.1.1 npm explore npm -g -- npm install node-gyp@5.1.1
升级注意事项
从v4.4升级到v14跨度极大,禁止跨多个大版本直接升级,必须按大版本号逐次迭代升级:v4 -> v6 -> v7 -> v8 -> v9 -> ... -> v14,每升级完一个大版本后先执行本地编译验证,确认无报错再进入下一个版本升级,否则会出现大量依赖冲突、语法兼容问题。
内容的提问来源于stack exchange,提问作者javaistaucheineinsel
相关产品推荐
相关产品推荐

