问题集:我用React Native开发了一个移动的应用程序。我现在需要白标签/复制和粘贴到不同的客户。每个客户可以基于他们的订阅而具有不同的功能。我想基本上有一个单一的/核心的代码库的功能,可以建立和固定的独立和应用程序只是“进口”的核心功能。
如果我修复了核心中的一个组件,我应该能够更新我所有的白色标签应用程序,但所有应用程序也可以有自己的皮肤/颜色/功能。我认为这是更好地保持长期的发展。它不是一个简单的皮肤,但也添加/删除的功能是基于客户。
这在Python中更容易,但我是React native的新手-寻找可用工具和技术的建议。
5条答案
按热度按时间deikduxw1#
我在开发一个白标应用程序时遇到了类似的问题集。
我的项目需求如下:
我通过以下方式实现了一个白标解决方案:
假设我们有两个客户,即
Dine Out
和Zomato
。react-native
中的多个应用程序之间共享的功能。Dine Out
只接受包裹take away
不送货,但Zomato
接受。类似地,Dine Out
有一个黑色的导航栏,但Zomato
喜欢更亮的。原生端主白标配置:
iOS:
对于
XCode
,我们可以将Zomato
和Dine Out
视为Xcode
中的两个不同的Targets
。因此,创建两个Targets
并创建构建配置来设置多个环境,即调试、发布。从上图中,您可以看到
TARGETS
部分下有两个目标。Build Active Architecture Only
下面还有5个Build Configuration
。Inspector
部分添加了资产和文件的目标。安卓系统:
就
Android Studio
而言,我们可以将Zomato
和Dine Out
视为两个不同的Flavors
。因此,创建两个应用程序Flavors
和创建buildTypes
来设置多个环境,即。调试,在应用程序级build.gradle
文件中发布。./app/src/
路径创建两个目录,其名称与构建风格名称相同,并粘贴配置文件和目标资产。完成此操作后,您将拥有一个目录结构,如下图所示。你可以从here找到android的详细配置。
React Native:
如果您已经遵循了所有步骤,那么您就完成了从本地端的配置。现在您只需要访问
react-native
中与Target
/Flavour
相关的值。React Native中有一些重要的库,可以帮助将值从原生环境获取到React Native环境。
react-native-build-config
:从上图中的Android
部分,您将看到一个buildConfigField
字段APP_ENVIRONMENT
,类型为String
。你可以通过在React Native中使用这个库来访问这个变量值。BuildConfig.APP_ENVIRONMENT
.同样,您可以在iOS中添加APP_ENVIRONMENT
变量,如下图所示。react-native-fs
:如果您将配置保存在本地目录中的JSON文件中,请使用此选项。在上面的配置中,我保留了PilotConfig.json
文件,它可以在React Native中使用fetch('PilotConfig.json
(iOS)和RNFS.readFileAssets('PilotConfig.json')
(Android)访问。react-native-localize
:您可以使用这个库来加载区域设置。它还提供了一个监听器,以防用户更改设备语言。其余的一切都在
JavaScript
的逻辑部分,你如何实现。还可以使用
build script
配置多个Firebase
应用程序。7y4bm7vi2#
您可以使用monorepo方法并从libs构建。我建议你通过nrwl结帐nx。
yk9xbfzb3#
我将从一个配置文件开始。例如:config.base.js(JSON)然后使用以下内容覆盖基本配置:config.custom.js
并且每个客户在构建时都会有自己的config.<customer_id>.js文件,您可以复制客户配置文件覆盖config.custom.js
示例如何将配置加载到应用程序中
应用程序代码将依赖于FEATURES_ENABLED来呈现
zd287kbt4#
针对您的情况,建议您为自己的app核心功能创建npm包**:
优势:
npm install
或更新您的软件包版本所以……
如果你不想公开你的核心代码,就创建一个private npm package:document
或者如果你可以将它作为一个公共包开源:document
干杯!
laximzn55#
我通过使用js脚本(
scriptName.js
)解决了这个问题,它将一个项目的文件夹移动到基本代码中,下面是一个例子:并使用节点
'theNemeOfYourScript'
.js project 1运行它。将一个脚本放到根目录中,并使目录结构如下所示:
使用imorts,就像你通常使用它们作为import * from 'src/assets/someFile'一样。