Ios 在OS X上使用NDEV设置React Native

Ios 在OS X上使用NDEV设置React Native,ios,node.js,xcode,react-native,Ios,Node.js,Xcode,React Native,在Xcode 7.1中设置新的React本机iOS项目时遇到了路径困难。我正在尝试使用来管理节点版本,这意味着~/.ndenv/shimmes需要在路径上。为此,我将路径设置为用户定义的项目设置,即$PATH:~/.ndenv/shimmes。Xcode设置UI显示正确的扩展路径值 然而,react native init生成的项目仍然无法构建。自定义生成脚本无法找到react native: 。/node\u modules/react native/packager/react-native

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

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

。/node\u modules/react native/packager/react-native-xcode.sh:第36行:未找到react native:命令

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

这一结果加上对构建环境中路径的进一步检查,清楚地表明Xcode正在沿着线路的某个地方重写路径

因此,按照优先顺序:

  • 如何在Xcode 7中正确地附加到自定义构建脚本的路径
  • 或者,让NDEV管理的npm模块在构建脚本的路径上运行的最佳方式是什么
修改react-native-xcode.sh是不可能的,因为这是外部react-native npm模块的一部分

更新1


作为临时解决办法,我已退出NDEV,并通过自制程序安装了node。这将
react native
放在
/usr/local/bin
的(显然是硬编码的)Xcode路径上,并使构建运行。我不会将此作为解决方案提交或接受,因为它不允许像NDEV那样对节点版本进行可重复控制。

也有同样的问题。在下面的链接中调用的工作方法对我有效。还没有找到一个永久的解决办法

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


问题似乎在于
react native xcode.sh
脚本依赖于路径中的
react native cli
包。该问题在Github上的两个问题中向项目报告:

我希望很快就能实施修复,因为这对于任何使用react native cli创建新项目的人来说都是一个重大问题

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

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


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

看起来这方面的修复刚刚发布为0.14.2版


该问题在着陆时已得到有效解决
react native xcode.sh
现在考虑一个NODE\u二进制环境变量,该变量告诉它在构建系统上的何处可以找到
NODE
。在应用程序的目标下,请参见构建阶段>绑定本地代码和图像,并将shell脚本代码设置为:

export NODE_BINARY=$HOME/.ndenv/shims/node
../node_modules/react-native/packager/react-native-xcode.sh
如果
节点
位于不同的位置,请更改node_BINARY的值以适合您的安装。下面是Xcode 7.1中的一个屏幕帽,用于帮助导航:


我通过NDEV使用节点,上面链接了,我更喜欢nvm/rvm系统。rvm建立了通过shell函数管理版本的模式,这意味着如果没有运行rvm运行时的shell,它实际上是不可用的。rbenv/ndenv只需维护一个脚本目录(
~/.ndenv/chimmes
),放在路径上。对于node、npm和任何节点bin脚本,shim dir中都有一个匹配的脚本。例如,当运行
react native
时,垫片询问NDEV要使用哪个节点,然后使用该版本调用原始脚本。不需要特殊的shell设置,只要路径上有一个dir就可以了。太好了,谢谢你给这个问题的链接。不管是什么原因,到目前为止我的搜索中还没有提到。谢谢。我注意到了,nvm用户肯定应该升级。不幸的是,修复程序是硬编码的,并且是nvm独有的,因为有大量本地用户使用nvm。nvm的工作原理是将函数注入shell,以代理每个npm的当前节点版本。因此,设置与nvm互操作的路径几乎是不可能的,这对自动化来说非常糟糕。遗憾的是,0.14.2的nvm补丁对NDEV用户、安装在
/usr/local
之外的自制软件或其他节点版本管理工具都是无用的。我仍然在求助于上面提到的“更新1”解决方案。