在OS X上使用ndenv设置React Native

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

然而,由react-native init生成的项目仍然无法构build。 自定义构build脚本无法findreact-native

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

react-native正确安装,但在构build输出中的环境variables转储清楚地表明~/.ndenv/shims不在PATH上。 我的path设置不会出现在生成环境中。 但是,如果我设置了随机的用户定义的设置(例如FOOBAR=baz ),那么 FOOBAR=baz环境中就会正确显示。

这个结果加上在构build环境中对PATH的进一步检查清楚地表明,Xcode正在重写PATH的某个地方。

所以按照喜好:

  • 如何在Xcode 7中正确追加到PATH中的自定义构build脚本?
  • 或者,在构build脚本的PATH上获取ndenv-managed npm模块的最好方法(最简单的方法是什么)?

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

更新1

作为一个临时的解决方法,我已经通过自制软件在ndenv上安装并安装了节点。 这使得在/usr/local/bin上的(显然是硬编码的)Xcodepath上的react-native成为可能,并且可以运行构build。 我不会提交或接受这个解决scheme,因为它不允许重复控制ndenv所做的节点版本。

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

我期望很快就能实施一个修复程序,因为这对任何使用react-native cli来创build新项目的人来说都是一个主要问题。

这个问题有几个解决方法,但没有一个是完美的。 哪一个会为你工作取决于你的节点/ npm设置:

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

如果您需要帮助为您的特定设置find解决scheme,请给我一些关于您的节点设置的更多信息。 (或者你可以尝试在上面链接的问题中指出的其他解决scheme之一。)

有同样的问题。 下面的链接中的解决方法正在为我工​​作。 还没有find永久的解决scheme。

XCode $ PATH与terminal$ PATH不同,它不包括nvm节点的path(〜/ .nvm / versions / …)。 这可以通过将source〜/ .bash_profile添加到react-native-xcode.sh

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

它看起来像一个修复这是刚刚发布0.14.2版本

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

当facebook / react-native#5518登陆时,这个问题得到了有效的解决。 react-native-xcode.sh现在考虑一个NODE_BINARY环境variables,告诉它在构build系统上的哪个地方findnode 。 在您的应用程序的目标下,请参阅构build阶段>捆绑React原生代码和图像,并将shell脚本代码设置为:

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

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

在“捆绑React原生代码和图像”下设置NODE_BINARY