diff --git a/packages/react-native/Libraries/Core/InitializeCore.js b/packages/react-native/Libraries/Core/InitializeCore.js index f01d96e0df1..5fb0bc191cd 100644 --- a/packages/react-native/Libraries/Core/InitializeCore.js +++ b/packages/react-native/Libraries/Core/InitializeCore.js @@ -31,10 +31,13 @@ const start = Date.now(); require('./setUpGlobals'); require('../../src/private/setup/setUpDOM').default(); require('./setUpPerformance'); -require('./setUpErrorHandling'); require('./polyfillPromise'); -require('./setUpRegeneratorRuntime'); require('./setUpTimers'); +if (__DEV__) { + require('./setUpReactDevTools'); +} +require('./setUpErrorHandling'); +require('./setUpRegeneratorRuntime'); require('./setUpXHR'); require('./setUpAlert'); require('./setUpNavigator'); diff --git a/packages/react-native/Libraries/Core/setUpErrorHandling.js b/packages/react-native/Libraries/Core/setUpErrorHandling.js index aa2c368d7dc..c879e388c75 100644 --- a/packages/react-native/Libraries/Core/setUpErrorHandling.js +++ b/packages/react-native/Libraries/Core/setUpErrorHandling.js @@ -10,11 +10,6 @@ 'use strict'; -if (__DEV__) { - // React DevTools need to be set up before the console.error patch. - require('./setUpReactDevTools'); -} - if (global.RN$useAlwaysAvailableJSErrorHandling !== true) { /** * Sets up the console and exception handling (redbox) for React Native. diff --git a/packages/react-native/Libraries/Core/setUpReactDevTools.js b/packages/react-native/Libraries/Core/setUpReactDevTools.js index 4d1e026294c..11a3529ba69 100644 --- a/packages/react-native/Libraries/Core/setUpReactDevTools.js +++ b/packages/react-native/Libraries/Core/setUpReactDevTools.js @@ -13,6 +13,22 @@ import type {Domain} from '../../src/private/debugging/setUpFuseboxReactDevToolsDispatcher'; import type {Spec as NativeReactDevToolsRuntimeSettingsModuleSpec} from '../../src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule'; +if (__DEV__) { + if (typeof global.queueMicrotask !== 'function') { + console.error( + 'queueMicrotask should exist before setting up React DevTools.', + ); + } + + // Keep in sync with ExceptionsManager/installConsoleErrorReporter + // $FlowExpectedError[prop-missing] + if (console._errorOriginal != null) { + console.error( + 'ExceptionsManager should be set up after React DevTools to avoid console.error arguments mutation', + ); + } +} + if (__DEV__) { // Register dispatcher on global, which can be used later by Chrome DevTools frontend require('../../src/private/debugging/setUpFuseboxReactDevToolsDispatcher');