2016-05-12 117 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

是的,我也有客户特定的配置和用户界面。就像在登录屏幕上,可能会有不同的主题,图形或逻辑。 –