2016-05-12 114 views
4

我們如何在React native中支持多租戶?像多個具有相同代碼庫的版本一樣。React Native中的多租戶

  • 在iOS中,我們可以製作多個目標以支持具有相同代碼庫的多個版本。
  • 爲Android,我們可以爲這個purspose

,但不知道我們如何能夠在實現這一反應本地的Gradle提供的配置。

回答

3

使用React Native時,您將項目結構作爲iOS和Android項目的一部分。這些是「正常」的XCode和Android項目,因爲它們沒有什麼特別之處,React被包含在一個庫中。

因此,您可以使用XCode打開由React Native CLI生成的項目,並像往常一樣定義您的構建目標。作爲參考,在這裏你可以看到它們用於在iOS上使用它們的cli運行項目的nodejs腳本: https://github.com/facebook/react-native/blob/master/local-cli/runIOS/runIOS.js 如果您需要做更復雜的事情,您可以隨時使用該代碼作爲參考並自己調用xcodebuild/xcrun 。或者,您只需直接從XCode運行ReactNative項目即可。

關於Android,在React Native項目的「android」目錄中,您會發現一些.gradle文件,您可以根據自己的需要再次調整。

由於反應本機項目結構的ios和android文件夾通常都保持在版本控制之下,因此您可以輕鬆地跟蹤這些配置。

我認爲這種方法不同於科爾多瓦/離子建議的方法,其中原生項目通常被忽略,並且通過它們的cli按需(例如在CI上)重新創建。

澄清後更新

如果您有具體的應用程序的每個版本不同的configs,那麼你有一個選擇是使用這樣的:https://www.npmjs.com/package/react-native-config,讓您指定和進口CONFIGS漂亮訪問它們很多地方,js和本地方。

如果你有不同的邏輯和代碼,而不僅僅是簡單的配置,一個選擇是將你的應用程序組件分成不同的子文件夾,然後使用一些命名約定來動態導入該版本的特定組件。

舉例來說,如果你有一個HomePage成分不同的爲每一位顧客,你可以創建一個customer1表/ Home.js文件夾,並動態地導入組件與

const Home = require('./' + Config.customerName + '/Home.js')

你也可以檢查是否Home是然後定義,然後回退並需要一個默認實現。

如果代碼庫在不同版本之間存在很大差異,我認爲你應該考慮一種不同的方法:不是構建「一個版本來統一所有版本」,你可以將共享組件和邏輯提取到一個單獨的npm包中,獨立版本和構建應用程序並引用通用軟件包。

根據你的情況,從長遠來看,這種方法可能會更簡單一些,因爲如果你真的需要也可以有更多的自由來偏離默認實現(例如,有瘋狂需求的客戶),而且結構更多模塊化,而不必複雜化一切。

希望我對此有所幫助,顯然沒有單一方法或通用解決方案,因爲它非常依賴於您的方案。

+0

與您的描述一致,我已經從反應文件夾結構中的各個本地項目瞭解到。但是我們如何編寫租戶特定的js代碼呢?例如如果我們有兩個租戶和兩個登錄屏幕,它的用戶界面和邏輯是不同的,那麼我們如何才能做到這一點。 –

+0

你能否澄清你的意思是租戶特定的js代碼?你的意思是你的某些配置是特定於某些客戶的嗎? –

+0

是的,我也有客戶特定的配置和用戶界面。就像在登錄屏幕上,可能會有不同的主題,圖形或邏輯。 –