Skip to content

React Native Android 无法找到 node 命令的解决方案 ​

问题描述 ​

在 React Native 开发中,许多开发者在 Android Studio 构建项目时会遇到以下错误:

:ReactNative:Running ‘[node, -e, console.log(require(‘react-native/cli’).bin);]’ command failed.

- Where:
Script ‘[...]/node_modules/@react-native-community/cli-platform-android/native_modules.gradle’ line: 154

- What went wrong:
A problem occurred evaluating script.
> Cannot run program "node": error=2, No such file or directory

Caused by: java.io.IOException: Cannot run program "node": error=2, No such file or directory

这个问题通常出现在 macOS 系统上,特别是使用 NVM (Node Version Manager) 管理 Node.js 版本的场景。iOS 构建可能正常,但 Android 构建失败。

根本原因 ​

Android Studio 在启动时会读取系统的 PATH 环境变量,但如果 Node.js 是通过 NVM 安装的,Android Studio 可能无法正确识别 node 命令的路径,导致构建失败。

解决方案 ​

以下是经过验证的多种解决方案,建议按顺序尝试:

方案一:通过终端启动 Android Studio ​

最常用解决方案

这是解决此问题的最有效方法之一

  1. 确保已关闭所有 Android Studio 实例

  2. 在终端中执行以下命令:

    bash
    # 标准安装路径
    open -a /Applications/Android\ Studio.app
    
    # JetBrains Toolbox 1.x 安装路径
    open -a ~/Applications/JetBrains\ Toolbox/Android\ Studio.app
    
    # JetBrains Toolbox 2.x 安装路径
    open "Applications/Android Studio.app"
  3. 在 Android Studio 中重新同步 Gradle

如果使用 NVM,请在启动 Android Studio 前先切换到正确的 Node 版本:

bash
nvm use [version]  # 或直接使用 nvm use(如果项目有 .nvmrc 文件)

方案二:创建符号链接 ​

为 Node.js 创建系统级符号链接:

bash
sudo ln -s "$(which node)" /usr/local/bin/node

注意事项

每次使用 nvm use 切换 Node 版本后,可能需要重新创建此符号链接

方案三:停止 Gradle 守护进程 ​

有时 Gradle 守护进程会缓存旧的环境变量:

bash
# 在项目根目录的 android 文件夹中执行
./gradlew --stop

然后重新启动 Android Studio 并同步 Gradle。

方案四:修改 Gradle 配置 ​

在 android/app/build.gradle 文件中添加动态获取 node 路径的逻辑:

groovy
import groovy.json.JsonSlurper

project.ext.react = [
    nodeExecutableAndArgs: [getNodePath()]
]

def getNodePath() {
    def process = "which node".execute()
    process.waitFor()
    def nodePath = process.in.text.trim()
    if (!nodePath) {
        throw new GradleException("Node.js executable not found in PATH. Please ensure Node.js is installed.")
    }
    return nodePath
}

方案五:更新 Android Studio 和 Gradle ​

推荐做法

保持开发工具最新版本可以避免许多兼容性问题

  1. 更新 Android Studio 到最新版本
  2. 更新项目中的 Gradle 版本:
    • 通过菜单:File → Project Structure → Project → Gradle Version
    • 或直接修改 android/gradle/wrapper/gradle-wrapper.properties:
      properties
      distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip

方案六:修复文件权限问题 ​

在某些情况下,Android Studio 的 printenv 工具可能缺少执行权限:

bash
sudo chmod +x /Applications/Android\ Studio.app/Contents/bin/printenv

然后重启 Android Studio。

方案七:更改 Gradle JDK 设置 ​

在 Android Studio 中修改 Gradle 使用的 JDK:

  1. 打开设置:File → Settings → Build, Execution, Deployment → Build Tools → Gradle
  2. 将 Gradle JDK 从嵌入式改为系统安装的 JDK(如 OpenJDK 17)

方案八:重启计算机 ​

简单的系统重启有时能解决临时的环境变量问题。

方案九:彻底重装 Android Studio ​

如果以上方法都无效,考虑完全重装:

  1. 卸载 Android Studio
  2. 删除所有相关的环境变量
  3. 重新安装最新版 Android Studio
  4. 按照 React Native 官方环境设置指南 重新配置

预防措施 ​

为了避免此类问题再次发生:

  1. 统一启动方式:始终通过终端启动 Android Studio
  2. 使用 Node版本管理:确保项目包含 .nvmrc 文件指定 Node 版本
  3. 定期更新工具:保持 Android Studio、Gradle 和 React Native 版本最新
  4. 文档化环境配置:团队共享统一的环境设置文档

总结 ​

React Native Android 构建中的 "Cannot run program 'node'" 错误通常是由于环境变量路径问题引起的。通过终端启动 Android Studio 是最有效的解决方案,其他方法如创建符号链接、更新工具版本等也值得尝试。选择适合你环境的方法,确保开发流程顺畅。

环境信息参考
  • macOS 版本:Monterey 12.6.1 或更高
  • Android Studio:Bumblebee 2021.1.1 或更高
  • Node.js:通过 NVM 管理
  • React Native:0.68+ 版本