diff --git a/packages/react-native/react-native.config.js b/packages/react-native/react-native.config.js index 64841ed37a7..b2dd5a5c643 100644 --- a/packages/react-native/react-native.config.js +++ b/packages/react-native/react-native.config.js @@ -9,8 +9,39 @@ 'use strict'; -const android = require('@react-native-community/cli-platform-android'); -const ios = require('@react-native-community/cli-platform-ios'); +// React Native shouldn't be exporting itself like this, the Community Template should be be directly +// depending on and injecting: +// - @react-native-community/cli-platform-android +// - @react-native-community/cli-platform-ios +// - @react-native/community-cli-plugin (via the @react-native/core-cli-utils package) +// - codegen command should be inhoused into @react-native-community/cli +// +// This is a temporary workaround. + +const verbose = process.env.DEBUG && process.env.DEBUG.includes('react-native'); + +let android; +try { + android = require('@react-native-community/cli-platform-android'); +} catch { + if (verbose) { + console.warn( + '@react-native-community/cli-platform-android not found, the react-native.config.js may be unusable.', + ); + } +} + +let ios; +try { + ios = require('@react-native-community/cli-platform-ios'); +} catch { + if (verbose) { + console.warn( + '@react-native-community/cli-platform-ios not found, the react-native.config.js may be unusable.', + ); + } +} + const { bundleCommand, startCommand, @@ -43,22 +74,25 @@ const codegenCommand = { ), }; -module.exports = { - commands: [ - ...ios.commands, - ...android.commands, - bundleCommand, - startCommand, - codegenCommand, - ], - platforms: { - ios: { - projectConfig: ios.projectConfig, - dependencyConfig: ios.dependencyConfig, - }, - android: { - projectConfig: android.projectConfig, - dependencyConfig: android.dependencyConfig, - }, - }, +const config = { + commands: [bundleCommand, startCommand, codegenCommand], + platforms: {}, }; + +if (ios != null) { + config.commands.push(...ios.commands); + config.platforms.ios = { + projectConfig: ios.projectConfig, + dependencyConfig: ios.dependencyConfig, + }; +} + +if (android != null) { + config.commands.push(...android.commands); + config.platforms.android = { + projectConfig: android.projectConfig, + dependencyConfig: android.dependencyConfig, + }; +} + +module.exports = config;