2015-11-07 62 views
4

我正在運行PATH困難,在Xcode 7.1中設置一個新的React Native iOS項目。我試圖使用ndenv來管理節點版本,這意味着~/.ndenv/shims需要在PATH上。爲此,我將PATH設置爲用戶定義的項目設置$PATH:~/.ndenv/shims。 Xcode設置UI顯示正確的擴展PATH值。在OS X上使用ndenv設置React Native

但該項目由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的某處。

所以在優先順序:

  • 如何正確地追加到PATH自定義生成腳本在Xcode 7?
  • 或者,在構建腳本的PATH上獲取ndenv-managed npm模塊的最好方法(最簡單的方法是什麼?

修改react-native-xcode.sh是不可能的,因爲這是外部react-native npm模塊的一部分。

UPDATE 1

作爲臨時解決辦法,我已經保釋上ndenv並通過自制安裝的節點。這將react-native置於(明顯硬編碼的)Xcode路徑/usr/local/bin上,並使構建運行。我不會提交或接受這個解決方案,因爲它不允許對ndenv所做的節點版本進行可重複控制。

回答

0

這個問題在facebook/react-native#5518降落時被有效修復。 react-native-xcode.sh現在遵循一個NODE_BINARY環境變量,它告訴它在構建系統上的何處找到node。在您的應用程序的目標,看到構建階段>捆綁陣營本地代碼和圖片,而shell腳本代碼設置爲:

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

如果您node是在不同的位置,改變NODE_BINARY的價值,以適應您的安裝。下面是在Xcode 7.1擷取畫面,以幫助導航:

Set NODE_BINARY under "Bundle React Native code and images"

1

有同樣的問題。下面的鏈接中提到的解決方法正在爲我工​​作。還沒有找到永久的解決方案。

XCode $ PATH與終端$ PATH不同,它不包括nvm節點的路徑(〜/ .nvm/versions/...)。這可以通過添加源〜/ .bash_profile中至react-native-xcode.sh

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

+0

大,感謝您的鏈接這一問題。無論出於何種原因,迄今爲止我的搜索都沒有出現。 –

2

問題的beginig臨時固定似乎是,所述react-native-xcode.sh腳本依賴於react-native-cli包是在路徑。此問題已報告給項目這兩個問題在Github上:

我期望相當儘快實施一個解決方法,因爲這是任何人都使用的一個主要問題反應原生cli創建新項目。

這個問題有幾個解決方法,但沒有一個是完美的。哪一個會爲你工作取決於你的節點/ npm設置:

我自己通過nvm安裝節點,只需要在運行react-native-xcode.sh之前添加export NVM_DIR=~/.nvm source $(brew --prefix nvm)/nvm.sh。 爲了達到此目的,您需要在全球安裝react-native-cli

如果您需要幫助爲您的特定設置找到解決方案,請給我一些關於您的節點設置的更多信息。 (或者你可以嘗試在我上面鏈接的問題的其他解決方案的一個人指出。)

+0

我正在使用節點通過ndenv,鏈接上面,我更喜歡nvm/rvm系統。 rvm通過shell函數建立了管理版本的模式,這意味着如果沒有運行rvm運行時的shell,它實際上是不可用的。 rbenv/ndenv,而不是隻保留放置在PATH上的腳本目錄('〜/ .ndenv/shims')。對於node,npm和任何節點bin腳本,在shim目錄中有一個匹配的腳本。例如。當'react-native'運行時,shim會詢問nden​​v使用哪個節點,然後使用該版本調用原始腳本。不需要特殊的shell設置,只需PATH上的一個目錄就可以工作。 –

0

它看起來像此修復剛剛出版的版本0.14.2

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

+0

謝謝。我注意到了,nvm用戶肯定應該升級。不幸的是,這個修補程序是硬編碼的,並且是nvm專有的,因爲有大量的React Native用戶使用nvm。 nvm通過向shell注入函數來代理每個npm binstub的當前節點版本。因此,將PATH設置爲與nvm進行互操作幾乎是不可能的,這對於自動化而言是非常可怕的。可悲的是,對於ndenv用戶來說,0.14.2的nvm修補程序是無用的,在/ usr/local之外安裝的自制軟件或其他節點版本管理工具是無用的。我仍在訴諸於上面的「更新1」解決方案。 –