概述
前几天mac重装系统了,用Android studio重新构建React native项目时,报Cannot run program "node"错误。
电脑系统为macOS 12.6.3 (Monterey),M1 Pro芯片。设备信息如下图所示:
完整错误信息如下图所示:
错误分析
刚开始看到错误信息时,比较困惑,完全不知道错误是什么意思,查了一些资料后,才想起来,之前也遇到过同样的错误。
看了一些资料后,再回过头来仔细查看错误信息,发现错误信息还是比较明确。
// 错误原因:执行这一条命令失败,导致构建失败
:ReactNative:Running '[node,-e, console.log(require('react-native/cli').bin);]' command failed.
// 发生错误的具体代码位置
*Where:
Script '/Users/01423389/ReactNative/css-android-reactnativemainland/node_modules/@react-native-community/cli-platform-android/native_modules.gradle' line:189
// 错误更详细原因,“node,-e, console.log(require('react-native/cli').bin);”这条命令执行,需要使用node,但无法运行node,所以报错
* What went wrong:
A problem occurred evaluating script.
>Cannot run program "node" (in directory "/Users/01423389/ReactNative/css-android-reactnativemainland/android"):error=2, No such file or directory
看一下报错的具体代码位置:
是在node_modules/@react-native-community/cli-platform-android/native_modules.gradle文件中。
所以错误发生的过程是:
- Android studio使用gradle构建React native项目,需要执行一些gradle脚本;
- gradle脚本中,需要使用node运行一些命令,处理js相关代码;
- 使用node运行命令时,发现node无法运行,所以报错,导致整个构建失败。
解决方案
错误产生的原因已经分析出来了,因为node无法运行。
但我的电脑中已经安装了node,并配置好了环境变量:
查看了相关资料后(google、stackoverflow),发现这是mac M1芯片才有的问题。stackoverflow上比较有效的解决方案是(本人也是使用此种方式),在终端用以下命令打开Android studio:
open -a /Applications/Android\ Studio.app
至于为什么使用这个命令打开Android studio,就能解决这个问题,暂时未深究。
附注:在jenkins中打包,node版本过低(比如10版本),我也遇到过这个问题,解决方案是升级node到14版本,并在jenkins打包设置中配置环境变量。
参考资料
stackoverflow-61922174
github-react-native-community-issues-1457
stackoverflow-67337836