hermes-engine编译报错 Command PhaseScriptExecution failed with a nonzero exit code

xcode:15.4
模拟器:17.5
node:v23.7.0
react-native:0.77.1

使用 npx @react-native-community/cli@latest init AwesomeProject 创建项目并安装依赖以后编译 iOS 端到 hermes-engine 这个组件时报错

image.png

这个报错是在编译时期执行 shell 脚本出现异常导致的,具体的错误原因为图中红线标识的地方。

这里提示找不到 /usr/local/Cellar/node/21.7.1/bin/node 目录,而这个目录是 brew 所安装的 node 目录,我的 node 命令正常执行,怎么会找不到呢?

经过检查以后发现我的 node 版本是 23.7.0,并没有 21.7.1 这个版本。那么这个版本路径是怎么来的呢?

我注意到在这个报错信息上方有一条打印信息:

Node found at: /usr/local/Cellar/node/21.7.1/bin/node

于是进入到react-native脚本目录 项目根目录/node_modules/react-native/scripts 下搜索这条打印,找到了脚本执行中获取 node 路径的代码

image.png

在这里我添加了三条 echo $NODE_BINARY 分别打印不同时期的 node 路径,再次执行编译后打印信息如下

image.png

这里可以看出,前两条打印信息是正常的,最后一次打印输出的路径是错误的,关键点便是下面的代码

LOCAL_ENV_PATH="${ENV_PATH}.local"
if [ -f "$LOCAL_ENV_PATH" ]; then
    source "$LOCAL_ENV_PATH"
fi

这段代码会判断项目目录下 /ios/Pods/../.xcode.env.local 文件是否存在,如果存在,则将文件中的内容加载到 source 中,而这个文件中只有一行内容:

export NODE_BINARY=/usr/local/Cellar/node/21.7.1/bin/node

将其内容删除后,编译通过!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容