React Native -如何构建我的移动的应用程序,以便我使用单个代码库,并且可以有多个白色标签的应用程序分支?

nc1teljy  于 2023-06-24  发布在  React
关注(0)|答案(5)|浏览(100)

问题集:我用React Native开发了一个移动的应用程序。我现在需要白标签/复制和粘贴到不同的客户。每个客户可以基于他们的订阅而具有不同的功能。我想基本上有一个单一的/核心的代码库的功能,可以建立和固定的独立和应用程序只是“进口”的核心功能。
如果我修复了核心中的一个组件,我应该能够更新我所有的白色标签应用程序,但所有应用程序也可以有自己的皮肤/颜色/功能。我认为这是更好地保持长期的发展。它不是一个简单的皮肤,但也添加/删除的功能是基于客户。
这在Python中更容易,但我是React native的新手-寻找可用工具和技术的建议。

deikduxw

deikduxw1#

我在开发一个白标应用程序时遇到了类似的问题集。

我的项目需求如下:

  • 本地化
  • 主题定制
  • 登录流程

我通过以下方式实现了一个白标解决方案:

假设我们有两个客户,即Dine OutZomato

  • 创建主应用程序流,即将在react-native中的多个应用程序之间共享的功能。
  • 确保您使用标志/值编写代码配置,并使组件可重用。例如:假设Dine Out只接受包裹take away不送货,但Zomato接受。类似地,Dine Out有一个黑色的导航栏,但Zomato喜欢更亮的。
  • 使可配置项的键对于所有应用程序都是相同的。

原生端主白标配置:

iOS:

对于XCode,我们可以将ZomatoDine Out视为Xcode中的两个不同的Targets。因此,创建两个Targets并创建构建配置来设置多个环境,即调试、发布。

从上图中,您可以看到TARGETS部分下有两个目标。Build Active Architecture Only下面还有5个Build Configuration

  • 从项目导航器部分创建两个目录并粘贴配置文件和目标资产。

  • 从目标目录中选择所有文件,并只检查您已经从Inspector部分添加了资产和文件的目标。

安卓系统:

Android Studio而言,我们可以将ZomatoDine Out视为两个不同的Flavors。因此,创建两个应用程序Flavors和创建buildTypes来设置多个环境,即。调试,在应用程序级build.gradle文件中发布。

  • ./app/src/路径创建两个目录,其名称与构建风格名称相同,并粘贴配置文件和目标资产。完成此操作后,您将拥有一个目录结构,如下图所示。

你可以从here找到android的详细配置。

React Native:

如果您已经遵循了所有步骤,那么您就完成了从本地端的配置。现在您只需要访问react-native中与Target/Flavour相关的值。
React Native中有一些重要的库,可以帮助将值从原生环境获取到React Native环境。

  1. react-native-build-config:从上图中的Android部分,您将看到一个buildConfigField字段APP_ENVIRONMENT,类型为String。你可以通过在React Native中使用这个库来访问这个变量值。BuildConfig.APP_ENVIRONMENT.同样,您可以在iOS中添加APP_ENVIRONMENT变量,如下图所示。

  1. react-native-fs:如果您将配置保存在本地目录中的JSON文件中,请使用此选项。在上面的配置中,我保留了PilotConfig.json文件,它可以在React Native中使用fetch('PilotConfig.json(iOS)和RNFS.readFileAssets('PilotConfig.json')(Android)访问。
  2. react-native-localize:您可以使用这个库来加载区域设置。它还提供了一个监听器,以防用户更改设备语言。
    其余的一切都在JavaScript的逻辑部分,你如何实现。
    还可以使用build script配置多个Firebase应用程序。
7y4bm7vi

7y4bm7vi2#

您可以使用monorepo方法并从libs构建。我建议你通过nrwl结帐nx

yk9xbfzb

yk9xbfzb3#

我将从一个配置文件开始。例如:config.base.js(JSON)然后使用以下内容覆盖基本配置:config.custom.js
并且每个客户在构建时都会有自己的config.<customer_id>.js文件,您可以复制客户配置文件覆盖config.custom.js
示例如何将配置加载到应用程序中

let baseConfig = require("./config.base.json");
const customConfig = require("./config.custom.js");

appConfig = Object.assign(baseConfig, customConfig);

export const FEATURES_ENABLED: [{id: string}: boolean] = appConfig.features;

应用程序代码将依赖于FEATURES_ENABLED来呈现

zd287kbt

zd287kbt4#

针对您的情况,建议您为自己的app核心功能创建npm包**:

优势:

  • 您可以在包项目中更新/修复核心,而不是每个应用项目
  • 如果要更新现有生产应用程序的核心,只需再次npm install或更新您的软件包版本
  • 对核心代码有更好的版本控制
  • 如果你的核心代码没有任何业务逻辑,可以开源,让其他开发者一起使用和改进(可选)

所以……

如果你不想公开你的核心代码,就创建一个private npm packagedocument
或者如果你可以将它作为一个公共包开源document
干杯!

laximzn5

laximzn55#

我通过使用js脚本(scriptName.js)解决了这个问题,它将一个项目的文件夹移动到基本代码中,下面是一个例子:

// Import necessary modules
const fs = require('fs-extra');

// Determine the app environment based on the script name
const scriptName = process.argv[2];
let assetFolder;

if (scriptName === 'project1') {
  assetFolder = './project1/assets';
} else if (scriptName === 'project2') {
  assetFolder = './project2/assets';
} else {
  console.error(
    'Invalid script name. Please provide "project1" or "project2" as argument.',
  );
  process.exit(1);
}

// Use the determined folders for the build
console.log('Script Name:', scriptName);
console.log('assetFolder:', assetFolder);
fs.copySync(assetFolder, './src/assets');

并使用节点'theNemeOfYourScript'.js project 1运行它。
将一个脚本放到根目录中,并使目录结构如下所示:

project1
  -assets
    -someFile
project2
  -assets
    -someFile
src
  -assets
    -`You can put a dummy file for initial`

使用imorts,就像你通常使用它们作为import * from 'src/assets/someFile'一样。

相关问题