React Native ios build:找不到节点

Lia*_*ang 11 build node.js ios react-native

我有一个准备好的原型,项目被构建堵塞:

错误:无法找到'node'二进制文件来构建React Native bundle如果您安装了非标准nodejs,请在Xcode中选择您的项目,找到'Build Phases' - 'Bundle React Native code and images'并将NODE_BINARY更改为绝对路径您的节点可执行文件(您可以通过调用终端中的"哪个节点"找到它)

这个反馈对我来说无能为力,我确实有nvm的节点.这是与bash有关的事吗?

提前致谢

小智 44

nvm 用户的解决方案:

在您的构建阶段脚本中,只需添加

# Fix for machines using nvm
if [[ -s "$HOME/.nvm/nvm.sh" ]]; then
. "$HOME/.nvm/nvm.sh"
elif [[ -x "$(command -v brew)" && -s "$(brew --prefix nvm)/nvm.sh" ]]; then
. "$(brew --prefix nvm)/nvm.sh"
fi
Run Code Online (Sandbox Code Playgroud)

多于export NODE_BINARY=node。无论您的机器是否使用 nvm,这都会使 Xcode 正常工作。

  • 这!这是正确的答案。这帮助我使用通过 NVM 安装的 Node 来运行我的 React Native 项目。 (3认同)

jos*_*ero 32

注释上的@brunocascio解决方案更简单,侵入性更小,在命令行上创建符号链接到节点:

ln -s $(which node) /usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)

  • 在新的 M1 Mac 上,我必须先“cd /usr/local”,然后“mkdir bin”(或者只是“sudo mkdir /usr/local/bin”)。 (5认同)
  • 对于 `nvm` 用户,这是在面对 `env: node: No such file or directory` 时在 Xcode 上构建你的 `react-native` 应用程序的解决方案。 (4认同)
  • 我认为这是一个更清洁的解决方案。对构建阶段解决方案的修改会导致对项目的修改,这可能会影响使用不同环境设置在同一项目上工作的其他团队成员。 (3认同)
  • 这对我来说与我的机器上的节点有关的任何事情都搞乱了...我无法运行其他节点命令,例如“gatsbydevelop”或“ntldev”...我通过恢复和删除“node”解决了这个问题在`/usr/local/bin`中 (2认同)

Lia*_*ang 22

我找到了一个 解决方案

首先在shell中找到您当前的节点

which node
Run Code Online (Sandbox Code Playgroud)

然后将您的节点URL复制到

export NODE_BINARY=[your node path]
../node_modules/react-native/packager/react-native-xcode.sh to node_modules/react-native/scripts/react-native-xcode.sh
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 最好创建符号链接如下:`ln -s $(哪个节点)/ usr/local/bin/node`并保留ios app配置为默认值.:) (17认同)
  • 不要这样做,这是一种黑客行为,会让你的构建变得脆弱。这是将硬编码的环境配置提交到您的存储库。 (7认同)
  • 嗨,路径已从 `node_modules/react-native/packager/react-native-xcode.sh` 更改为 `node_modules/react-native/scripts/react-native-xcode.sh` (2认同)

小智 17

如果您正在开发基于 React Native 的解决方案,并且使用 NVM 进行本地 Node 版本控制,则错误可能是由于此原因造成的。

XCode找不到Node版本,当然XCodefetches the Node in the / usr / local / bin / node directory和NVM将Node存储在另一个目录中,例如Users / $ {my-user} /. Nvm / versions /node/v14.16.0/bin/node

为了工作,为 XCode 创建一个别名以在其默认搜索中查找节点就足够了:

sudo ln -s $(which node) /usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)


小智 17

对于 2022 年偶然发现此问题的任何人,以下是我的情况以及我如何解决它。

  1. react-native --version-> 4.14
  2. npx --version-> 6.14.9
  3. node --version-> 12.14.1
  4. 我们也使用 TypeScript。

XCode“捆绑 React Native 代码和图像”

在此输入图像描述

export ENTRY_FILE=src/App.tsx
../node_modules/react-native/scripts/react-native-xcode.sh
../node_modules/expo-constants/scripts/get-app-config-ios.sh
../node_modules/expo-updates/scripts/create-manifest-ios.sh
Run Code Online (Sandbox Code Playgroud)

删除该export NODE_BINARY=node行代码。不再需要了。我解决这个问题的方法是阅读在../node_modules/react-native/scripts/react-native-xcode.sh如果你看那里找到的源代码,你会发现 nvm/node 采购已经为你完成了。


小智 14

nvm alias default 14
Run Code Online (Sandbox Code Playgroud)

或者

sudo ln -s "$(which node)" /usr/local/bin/node 
Run Code Online (Sandbox Code Playgroud)

这让我的 Xcode 12.4 看到了节点


Gle*_*enn 12

2022 年,默认构建会在 ios/.xcode.env.local 和 ios/.xcode.env 中查找环境自定义。提供的 .xcode.env 有一个启用 nvm 并设置 NODE_BINARY 的示例。

这是在构建阶段 -> 捆绑 React Native 代码和图像中配置的。大约 10/2022 年的 shell 脚本如下所示:

set -e

WITH_ENVIRONMENT="../node_modules/react-native/scripts/xcode/with-environment.sh"
REACT_NATIVE_XCODE="../node_modules/react-native/scripts/react-native-xcode.sh"

/bin/sh -c "$WITH_ENVIRONMENT $REACT_NATIVE_XCODE"
Run Code Online (Sandbox Code Playgroud)

该脚本的输入文件部分有

$(SRCROOT)/.xcode.env.local
$(SRCROOT)/.xcode.env
Run Code Online (Sandbox Code Playgroud)

默认的 .xcode.env 现在看起来像这样:

# This `.xcode.env` file is versioned and is used to source the environment
# used when running script phases inside Xcode.
# To customize your local environment, you can create an `.xcode.env.local`
# file that is not versioned.

# NODE_BINARY variable contains the PATH to the node executable.
#
# Customize the NODE_BINARY variable here.
# For example, to use nvm with brew, add the following line
#. "$(brew --prefix nvm)/nvm.sh" --no-use
export NODE_BINARY=$(command -v node)
Run Code Online (Sandbox Code Playgroud)

要可靠地获取节点集,请将项目属性配置为当前默认值并更新两个参考环境文件之一。

我的 ios/.xcode.env 看起来像这样:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
export NODE_BINARY=$(command -v node)
Run Code Online (Sandbox Code Playgroud)


apr*_*eda 6

最好的解决方案是实际执行ln -s $(which node) /usr/local/bin,这将创建一个从/usr/local/bin/node节点所在位置的“符号链接”,这很重要,因为大多数应用程序都会在此路径上查看节点。您可能不想这样做export NODE_BINARY=[your node path],因为当另一个队友有不同的操作系统或不同的节点安装时(即,一个使用 nvm,另一个使用 homebrew),那么会发生相同的错误,在为生产构建时也会发生。ln -s $(which node) /usr/local/bin所以为了安全就跟着去吧。