Вы не должны использовать Метро transform
таким образом. Он не чистый и может рано или поздно привести к отсутствующей конфигурации и / или поврежденному синтаксису.
То, что я сделал и предлагаю вам, - это создание 3 различных файлов конфигурации в src/config/
; один файл для fooClient.js
, один файл для barClient.js
и один последний файл с общей конфигурацией client.js
. Все файлы будут экспортировать объекты конфигурации по умолчанию, но внутри каждого fooClient
и barClient
вы будете использовать модуль deepmerge
для объединения client.js
config:
client.js
:
export default {
commonSettingA: "...",
commonSettings: {
...
}
...
}
fooClient.js
:
import merge from 'deepmerge';
import config from './config';
export default merge.all([
config,
{
apiUrl: "https://foo.example.com/",
}
]);
barClient.js
:
import merge from 'deepmerge';
import config from './config';
export default merge.all([
config,
{
apiUrl: "https://bar.example.com/",
}
]);
Затем вы можете использовать переменную окружения для передачи необходимой конфигурации и создания собственное разрешение метро; @react-native-community/cli
не передает аргументы командной строки в скрипт конфигурации Metro. Вы можете использовать process.argv
для самостоятельного анализа, но это того не стоит.
Вот как вы можете создать разрешение внутри metro.config.js
, используя переменную окружения:
const path = require("path");
module.exports = {
projectRoot: path.resolve(__dirname),
resolver: {
sourceExts: ['js', 'jsx', 'ts', 'tsx'],
extraNodeModules: {
// Local aliases
"@config": path.resolve(__dirname, "src/config", `${process.env.METRO_VARIANT}Client.js`)
}
}
};
Использование Для этого решения вам нужно будет импортировать конфигурацию следующим образом:
import config from '@config';
Затем вы добавляете 2 package.json
сценария, один для fooClient
и один для barClient
:
{
...
"scripts": {
"run:android:foo": "METRO_VARIANT=foo ENVFILE=.env npx react-native run-android --variant fooDebug --appIdSuffix foo",
"run:android:bar": "METRO_VARIANT=bar ENVFILE=.env npx react-native run-android --variant barDebug --appIdSuffix bar",
...
}
...
}
Затем вы просто запускаете нужный скрипт:
yarn run:android:foo # will build with fooClient.js
yarn run:android:bar # will build with barClient.js