reactjs - React Native 中的 Multi-Tenancy

标签 reactjs react-native multi-tenant

我们如何在 React Native 中支持 Multi-Tenancy ?就像使用相同代码库的多个构建一样。

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

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

最佳答案

使用 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 文件,您可以再次根据需要进行调整。

由于 React Native 项目结构的 ios 和 android 文件夹通常都处于版本控制之下,因此您可以轻松跟踪这些配置。

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

澄清后更新

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

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

例如,如果每个客户都有一个不同的 HomePage 组件,则可以创建一个 customer1/Home.js 文件夹并使用

动态导入该组件

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

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

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

根据您的场景,从长远来看,这种方法可能会更简单,因为如果您确实需要(例如,具有疯狂需求的客户),您将有更多的自由来偏离默认实现,并且结构将更加模块化,而不必使一切变得复杂。

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

关于reactjs - React Native 中的 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184792/

相关文章:

javascript - 使用 React Hooks 的 setter,如何在组件渲染之前设置数据?

reactjs - Redux:无法弄清楚为什么 ownProps 与状态不同步

react-native - 如何使用特定目标运行react-native run-ios

用于处理多个域的 Python Web 框架?

java - EclipseLink:如何关闭 Multi-Tenancy ,即使我用@MultiTenant 注释实体

javascript - 使用 jest fake 计时器测试 redux-saga debounce

jquery - 在react componentDidMount中bind(this)后获取jquery对象

react-native - 获取 'Invariant Violation: ` 刷新属性必须设置为 bool 值才能使用 `onRefresh` ,但得到 `undefined` '

react-native - eslint 无法解析 $ReadOnlyArray

spring - 使用 Spring、Hibernate 和 C3P0 管理 Multi-Tenancy Web 应用程序中的连接池