【问题标题】:Setup of React Native using ndenv on OS X在 OS X 上使用 ndenv 设置 React Native
【发布时间】:2023-04-10 17:52:01
【问题描述】:

我在 Xcode 7.1 中设置一个新的 React Native iOS 项目时遇到了 PATH 困难。我正在尝试使用ndenv 来管理节点版本,这意味着~/.ndenv/shims 需要在PATH 上。为此,我将 PATH 设置为用户定义的项目设置为$PATH:~/.ndenv/shims。 Xcode 设置 UI 显示正确的扩展 PATH 值。

然而,由react-native init 生成的项目仍然无法构建。自定义构建脚本找不到react-native

../node_modules/react-native/packager/react-native-xcode.sh: line 36: react-native: command not found

react-native 已正确安装,但构建输出中的环境变量转储清楚地表明 ~/.ndenv/shims 不在 PATH 上。我的 PATH 设置没有出现在构建环境中。但是,如果我设置了一个随机的用户定义设置(例如FOOBAR=baz),那确实会正确显示在构建环境中。

该结果加上对构建环境中 PATH 的进一步检查清楚地表明 Xcode 正在沿线某处覆盖 PATH。

所以按照优先顺序:

  • 如何在 Xcode 7 中为自定义构建脚本正确附加到 PATH?
  • 或者,在构建脚本的 PATH 上获取 ndenv 管理的 npm 模块的最佳(最简单?)方法是什么?

修改 react-native-xcode.sh 是不可能的,因为这是外部 react-native npm 模块的一部分。

更新 1

作为一种临时解决方法,我已经放弃了 ndenv 并通过自制软件安装了节点。这会将react-native 放在/usr/local/bin 的(显然是硬编码的)Xcode 路径上,并且可以让构建运行。我不会提交或接受此解决方案,因为它不允许对 ndenv 所做的节点版本进行可重复控制。

【问题讨论】:

    标签: ios node.js xcode react-native


    【解决方案1】:

    问题似乎是 react-native-xcode.sh 脚本依赖于 PATH 中的 react-native-cli 包。这个问题在 Github 上的这两个 issue 中被报告给了项目:

    我预计很快就会实施修复,因为对于使用 react-native cli 创建新项目的任何人来说,这都是一个主要问题。

    有一些解决这个问题的方法,但没有一个是完美的。哪一个适合您取决于您​​的节点/npm 设置:

    我自己通过 nvm 安装了节点,只需要在运行 react-native-xcode.sh 之前添加 export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh。 为此,您需要在全局范围内安装 react-native-cli

    如果您需要帮助为您的特定设置寻找解决方案,请提供有关您的节点设置的更多信息。 (或者您可以尝试我在上面链接的问题中指出的其他解决方案之一。)

    【讨论】:

    • 我通过 ndenv 使用节点,上面链接,我更喜欢 nvm/rvm 系统。 rvm 建立了通过 shell 函数管理版本的模式,这意味着如果没有运行 rvm 运行时的 shell,它实际上是无法使用的。 rbenv/ndenv 只是维护一个脚本目录 (~/.ndenv/shims),放在 PATH 上。对于 node、npm 和任何 node bin 脚本,在 shim 目录中有一个匹配的脚本。例如。当react-native 运行时,shim 询问 ndenv 使用哪个节点,然后使用该版本调用原始脚本。不需要特殊的 shell 设置,只需 PATH 上的一个目录即可。
    【解决方案2】:

    有同样的问题。下面链接中提到的解决方法对我有用。还没有找到永久的解决方案。

    XCode $PATH 与终端 $PATH 不同,它不包含 nvm 节点的路径 (~/.nvm/versions/...)。这可以通过将 source ~/.bash_profile 添加到 react-native-xcode.sh 的开头来临时修复

    https://github.com/facebook/react-native/issues/3948

    【讨论】:

    • 太好了,感谢您提供指向该问题的链接。到目前为止,无论出于何种原因,这都没有出现在我的搜索中。
    【解决方案3】:

    facebook/react-native#5518 登陆后,此问题已得到有效修复。 react-native-xcode.sh 现在尊重一个 NODE_BINARY 环境变量,它告诉它在构建系统上哪里可以找到 node。在您的应用程序的目标下,请参阅构建阶段 > 捆绑 React Native 代码和图像并将 shell 脚本代码设置为:

    export NODE_BINARY=$HOME/.ndenv/shims/node
    ../node_modules/react-native/packager/react-native-xcode.sh
    

    如果您的 node 位于其他位置,请更改 NODE_BINARY 的值以适合您的安装。这是 Xcode 7.1 的屏幕截图,用于帮助导航:

    【讨论】:

      【解决方案4】:

      看起来对这个问题的修复刚刚发布为版本 0.14.2

      https://github.com/facebook/react-native/releases/tag/v0.14.2

      【讨论】:

      • 谢谢。我注意到了,nvm 用户绝对应该升级。不幸的是,该修复程序是硬编码的,并且是 nvm 独有的,因为有大量 React Native 用户使用 nvm。 nvm 通过向 shell 中注入函数来代理每个 npm binstub 的当前节点版本。因此,将 PATH 设置为与 nvm 互操作实际上是不可能的,这使得自动化变得很糟糕。遗憾的是,0.14.2 的 nvm 修复对 ndenv 用户、安装在 /usr/local 之外的自制软件或其他节点版本管理工具毫无用处。我仍在使用上面的“更新 1”解决方案。
      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2013-07-27
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多