M1芯片Mac 13系统node-gyp报exit 2错误该如何解决?
M1芯片MacOS 13系统node-gyp编译错误解决方案
前置检查
node-gyp编译依赖XCode命令行工具,先执行以下命令确认已安装:xcode-select --install
如果提示已安装可直接跳过后续检查步骤,如未安装按弹出的提示完成安装即可。
核心问题说明
从报错日志可判断,本次编译失败是项目依赖的node-sass包导致:旧版node-sass不兼容M1系列的ARM架构,且你当前使用的Node.js 16版本要求node-sass版本不低于v6.0.0,版本不匹配就会触发原生模块编译失败。
可行解决方案(按优先级排序)
方案1:替换node-sass为纯JS版sass(最推荐,无兼容问题)
node-sass官方已宣布废弃,sass是官方推出的纯JS替代版本,无需编译原生模块,适配全架构设备,绝大多数项目无需修改业务代码即可直接替换:
- 卸载旧的node-sass依赖:
# npm用户执行 npm uninstall node-sass # yarn用户执行 yarn remove node-sass
- 安装新的sass依赖:
# npm用户执行 npm install sass --save-dev # yarn用户执行 yarn add sass --dev
- 清理缓存后重装所有依赖:
rm -rf node_modules package-lock.json yarn.lock && npm install
方案2:保留node-sass的适配方案
如果项目历史原因必须保留node-sass依赖,可通过Rosetta转译运行终端解决:
- 访达中打开「应用程序」-「实用工具」文件夹,右键点击「终端」,选择「显示简介」,勾选「使用Rosetta打开」,关闭后重启终端
- 确认node-sass版本和Node.js版本匹配:Node 16对应node-sass@6.x及以上版本,可手动指定版本安装:
npm install node-sass@6.0.1 --save-dev - 重新执行依赖安装即可
方案3:手动指定编译架构
如果上述方案仍不生效,可手动指定npm编译时使用x64架构:
- 单次安装指定架构:
npm install --target_arch=x64 - 全局设置默认编译架构:
npm config set arch x64
设置完成后重新安装依赖即可。
内容的提问来源于stack exchange,提问作者Nick Morgan
相关产品推荐
相关产品推荐

