Skip to content

[0.87] Consolidate react-native/setup-env in Metro configs - #57559

Closed
huntie wants to merge 2 commits into
react:0.87-stablefrom
huntie:0.87-consolidate-setup-env
Closed

[0.87] Consolidate react-native/setup-env in Metro configs#57559
huntie wants to merge 2 commits into
react:0.87-stablefrom
huntie:0.87-consolidate-setup-env

Conversation

@huntie

@huntiehuntie commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Tidy ups following #57557.

Cause

Ultimately, a race condition on 0.87-stable from not having all of the following changes at once:

This PR aligns the branch state with main (and undoes #57557).

Changelog: [Internal]

Test Plan

Template E2E (test_e2e_ios_templateapp / test_e2e_android_templateapp)

cipolleschiand others added 2 commits July 15, 2026 11:21
Summary:
react#57475 pointed Metro's `getModulesRunBeforeMainModule` at `react-native/setup-env` (`src/setup-env.js`) instead of `InitializeCore`.
But Metro's serializer only emits a run-before-main require for modules **already in the bundle graph** — see `getAppendScripts`:
```js
const paths = [...options.runBeforeMainModule, entryPoint];
for (const path of paths) {
if (modules.some(module => module.path === path)) { /* emit run stmt */ }
}
```
Nothing imports `src/setup-env.js` at runtime, so it was silently dropped. The RN environment setup (`setUpDefaultReactNativeEnvironment`: `HMRClient`, timers, batched bridge, `AppRegistry` setup, …) then never ran before the app's main module, and the app **redboxed on launch**:
```
Error: Failed to call into JavaScript module method HMRClient.setup().
Module has not been registered as callable.
Registered callable JavaScript modules (n = 1): AppRegistry.
```
This broke the **template E2E tests** on both iOS and Android — the app renders a redbox, so Maestro's `assertVisible: 'Welcome to React Native'` fails (the `test (…)` jobs are green only because the Maestro step runs with `continue-on-error: true`; the real failure surfaces via the retry chain and the `retry_2 / report` job).
## Fix
Have the deprecated `InitializeCore` delegate to `'react-native/setup-env'` via a side-effectful `require`. `InitializeCore` is a guaranteed graph entry (renderer → `ReactNativePrivateInitializeCore` → `InitializeCore`), so this pulls `src/setup-env.js` into the graph, and `getModulesRunBeforeMainModule` runs it before the main module again.
Behavior is unchanged: `setup-env` and `InitializeCore` both call the idempotent `setUpDefaultReactNativeEnvironment()`. This keeps react#57475 move to `setup-env` intact rather than reverting it.
## Changelog:
[General][Fixed] - Fix app failing to initialize (`HMRClient.setup()` redbox) because the environment setup module was dropped from the bundle
Pull Request resolved: react#57492
Test Plan:
- Template E2E (`test_e2e_ios_templateapp` / `test_e2e_android_templateapp`) should pass: app launches and shows "Welcome to React Native" instead of the redbox.
cc huntie (react#57475)
Reviewed By: cipolleschi
Differential Revision: D111226610
Pulled By: huntie
fbshipit-source-id: b44e82a248c1f2333c2ea85001c9f243b54619ad
@huntie
huntie requested review from cipolleschi and zeyapJuly 15, 2026 10:28
@meta-clameta-claBot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Jul 15, 2026
meta-codesyncBot pushed a commit that referenced this pull request Jul 16, 2026
Summary:
Pull Request resolved: #57560
Reverts D112002434.
This fix was needed on `0.87-stable` but not on `main`, since the `setup-env`-in-bundle-graph fix (#57492) was already present, see file at time of D112002434:
https://github.com/react/react-native/blob/08c323346be6c0fbbd70900d48435f977a78a1bb/packages/react-native/Libraries/Core/InitializeCore.js#L30-L37
See #57559 for more info.
Changelog: [Internal]
Reviewed By: zeyap
Differential Revision: D112101450
fbshipit-source-id: 435a24e72415e18b5e3d6a5144ed805adc415a95
react-native-bot pushed a commit that referenced this pull request Jul 16, 2026
Summary:
Pull Request resolved: #57560
Reverts D112002434.
This fix was needed on `0.87-stable` but not on `main`, since the `setup-env`-in-bundle-graph fix (#57492) was already present, see file at time of D112002434:
https://github.com/react/react-native/blob/08c323346be6c0fbbd70900d48435f977a78a1bb/packages/react-native/Libraries/Core/InitializeCore.js#L30-L37
See #57559 for more info.
Changelog: [Internal]
Reviewed By: zeyap
Differential Revision: D112101450
fbshipit-source-id: 435a24e72415e18b5e3d6a5144ed805adc415a95
@zeyap

Copy link
Copy Markdown
Contributor

Merged commits manually

@zeyapzeyap closed this Jul 20, 2026
@huntie
huntie deleted the 0.87-consolidate-setup-env branch July 21, 2026 10:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.p: FacebookPartner: FacebookPartnerPick Request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@huntie@zeyap@cipolleschi