2016-05-12 3 views
4

Reactネイティブでマルチテナントをサポートする方法は?同じコードベースを持つ複数のビルドに似ています。リテールネイティブのマルチテナント

  • iOSでは、複数のターゲットを作成して、同じコードベースで複数のビルドをサポートすることができます。
  • は、アンドロイドのために我々は、このpurspose

が、我々がこれを達成ネイティブに反応することができる方法がわからないためGradleの構成を提供することができます。

答えて

3

React Nativeで作業する場合、プロジェクト構造の一部としてiOSプロジェクトとAndroidプロジェクトの両方があります。これらは「普通の」XcodeとAndroidプロジェクトで、特別なことは何もないという意味で、Reactはライブラリとして含まれています。

React Native CLIで生成されたプロジェクトをXCodeで開き、いつものようにビルドターゲットを定義することができます。ここでは、cliを使ってiOSでプロジェクトを実行するために使用するnodejsスクリプトを見ることができます: https://github.com/facebook/react-native/blob/master/local-cli/runIOS/runIOS.js さらに洗練されたものを行う必要がある場合は、そのコードを参照として使用してxcodebuild/xcrun 。あるいは単にReactNativeプロジェクトをXCodeから直接実行することもできます。

Androidについては、React Nativeプロジェクトの "android"ディレクトリの中に、あなたのニーズに合わせて調整できる.gradleファイルが2つあります。

あなたの反応するネイティブプロジェクト構造のiosとandroidフォルダは、通常、バージョン管理されているので、これらの設定を簡単に追跡できます。

このアプローチは、ネイティブプロジェクトが通常無視され、cliを通じてオンデマンドで(たとえばCI上で)再作成されるCordova/ionicのアプローチとは異なると思います。 https://www.npmjs.com/package/react-native-configあなたが指定し、輸入のconfigsとかなりそれらにアクセスすることができます:明確化

アプリのバージョンごとに固有の異なるコンフィグを持っている場合は、あなたが持っている一つの選択肢は、このようなものを使用した後に更新

多くの場所、jsとネイティブ側。

単純な設定だけでなくロジックとコードが異なる場合は、アプリコンポーネントを異なるサブフォルダに分割し、いくつかの命名規則を使用してそのバージョンの特定のコンポーネントを動的にインポートすることができます。あなたはすべての顧客のためのさまざまなコンポーネントHomePageを持っている場合たとえば、あなたはcustomer1/Home.jsフォルダを

を作成することができ、動的に

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

とそのコンポーネントをインポートHomeがある場合にも、チェックすることができます定義され、フォールバックし、代わりにデフォルトの実装を必要とします。

異なるバージョン間でコードベースが大きく異なる場合は、別のアプローチを検討する必要があります。「それらをすべて統治する1つのバージョン」を構築する代わりに、共有コンポーネントとロジックを別々のnpmパッケージに抽出し、アプリケーションのための独立したバージョンとビルドを行い、共通のパッケージを参照します。

このアプローチは、実際に必要な場合(たとえばクレイジーな要件のクライアントなど)、デフォルトの実装とは異なる自由度を持ち、より多くのモジュール式で、すべてを複雑にする必要はありません。

これは私の考えでは役に立ちますが、あなたのシナリオに非常に依存しているので、明らかに単一のアプローチやこれに対する普遍的な解決策はありません。

+0

あなたの説明に同意して、私はすでに反応フォルダ構造の個々のネイティブプロジェクトから認識しています。しかし、どのようにテナント固有のjsコードを書くことができますか?例えば2つのテナントがあり、両方のログイン画面でUIとロジックが異なる場合、どのようにそれを達成できるのでしょうか。 –

+0

テナント固有のjsコードの意味を明確にしてください。特定の顧客に固有の設定があることを意味しますか? –

+0

はい私は顧客固有の設定とUIも持っています。ログイン画面のように、テーマやグラフィックが異なることもありますし、論理も可能です。 –

関連する問題