You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M2+芯片Mac设备上Lerna+React Native 0.76项目编译报错:ReactCodegen: Command PhaseScriptExecution failed with a nonzero exit code

M2+芯片Mac设备上Lerna+React Native 0.76项目编译报错:ReactCodegen: Command PhaseScriptExecution failed with a nonzero exit code

我之前在M2 Mac上跑RN 0.76的Lerna项目时也踩过这个坑,codegen阶段的脚本错误确实挺头疼的。你已经试过了设置NODE_BINARY、清理Pods和Build文件夹这些基础操作,那我给你补充几个针对性的解决方案,亲测有效的那种:

  • 锁定Node版本并统一依赖环境
    虽然你用了v20和v22,但RN 0.76对Node 22的兼容性其实还没完全打磨好,建议优先切换到v20.x的LTS稳定版(比如v20.18.0)。用nvm的话,在项目根目录执行nvm use v20.18.0,然后删掉项目根目录和所有Lerna子包的node_modules、package-lock.json,重新跑npm install或者yarn install,避免依赖版本混乱。另外要确保Xcode能识别到nvm管理的Node路径,有时候Xcode会默认用系统Node,这就会导致路径不匹配。

  • 修复ReactCodegen脚本的权限与路径
    进到iOS项目的Pods/ReactCodegen目录,先给生成脚本加执行权限:chmod +x generate-specs.sh。然后打开Xcode,找到Build Phases里的[CP-User] Generate Specs这个阶段,手动修改NODE_BINARY的绝对路径,比如改成你nvm下Node的实际路径:export NODE_BINARY="/Users/你的用户名/.nvm/versions/node/v20.18.0/bin/node",这样Xcode就能精准找到正确的Node执行文件了。

  • 清理深层缓存,避免残留冲突
    除了常规的Pods和Build文件夹清理,还要多做两步:

    1. 清理RN的全局缓存:npx react-native clean
    2. 清理Cocoapods的本地缓存:pod cache clean --all
      之后再重新pod install,很多时候深层缓存的残留会导致codegen生成的spec文件冲突。
  • 调整Xcode的架构编译设置
    M系列芯片是arm64架构,Xcode有时候会默认编译多架构导致冲突。打开Xcode,选中你的项目target,进入Build Settings:

    • 搜索Excluded Architectures,把Debug和Release模式下的选项都设置为arm64(不要选x86_64)
    • 搜索Build Active Architecture Only,设置为YES,让Xcode只编译当前设备的架构,减少codegen的负担。
  • 统一Lerna子包的RN依赖
    因为是monorepo结构,很容易出现子包和根项目RN版本不一致的情况。执行lerna clean清空所有子包的node_modules,然后用lerna bootstrap --hoist重新安装依赖,把RN相关的依赖统一提升到根目录,这样所有子包都会用同一个版本的RN,避免codegen生成的specs不兼容。

如果上面的方法都试过还是不行,你可以打开Xcode的Build Log,找到Generate Specs阶段的详细报错信息,里面会有更具体的错误提示(比如某个依赖的spec生成失败),顺着这个线索排查会更高效。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:13:08