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+ 版本