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
将其内容删除后,编译通过!