React Native 中的多租户

IT技术 reactjs react-native multi-tenant
2021-05-19 08:51:56

我们如何在 React Native 中支持多租户?就像具有相同代码库的多个构建一样。

  • 在 iOS 中,我们可以创建多个目标以支持具有相同代码库的多个构建。
  • 对于 android,我们可以为此目的提供 gradle 配置

但不确定我们如何在 react native 中实现这一点。

1个回答

使用 React Native 时,iOS 和 Android 项目都作为项目结构的一部分。这些是“普通”的 XCode 和 Android 项目,因为它们没有什么特别之处,React 作为库包含在内。

因此,您可以使用 XCode 打开由 React Native CLI 生成的项目,并像往常一样在其中定义构建目标。作为参考,您可以在此处查看他们用于使用 cli 在 iOS 上运行项目的 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 文件夹通常都处于版本控制之下,您可以轻松跟踪这些配置。

我认为这种方法与 Cordova/ionic 建议的方法不同,后者通常会忽略本地项目,并通过其 cli 按需(例如在 CI 上)重新创建。

澄清后更新

如果您针对应用程序的每个版本有不同的配置,那么您可以选择使用以下内容:https : //www.npmjs.com/package/react-native-config允许您指定和导入配置和几乎可以在任何地方访问它们,js 和本地端。

如果您有不同的逻辑和代码,而不仅仅是简单的配置,一种选择是将您的应用程序组件拆分到不同的子文件夹中,然后使用一些命名约定为该版本动态导入特定组件。

例如,如果HomePage每个客户都有一个不同组件,则可以创建一个 customer1/Home.js 文件夹并使用以下命令动态导入该组件

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

您还可以检查是否Home已定义,然后回退并要求使用默认实现。

如果不同版本之间的代码库差异很大,我认为您应该考虑采用不同的方法:您可以将共享组件和逻辑提取到单独的 npm 包中,拥有独立的版本和构建,而不是构建“一个版本来统治所有版本”对于应用程序并参考通用包。

根据您的情况,从长远来看,这种方法可能会更简单,因为如果您真的需要(例如具有疯狂要求的客户端),您将有更多的自由来偏离默认实现,并且结构将更加module化,而无需使一切复杂化。

希望我对此的看法会有所帮助,显然没有单一的方法或通用的解决方案,因为它非常依赖于您的场景。