Skip to content

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

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

[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

@huntie huntie commented Jul 15, 2026

Copy link
Copy Markdown
Member

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)

cipolleschi and 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 zeyap July 15, 2026 10:28
@meta-cla meta-cla Bot 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-codesync 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
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Facebook Partner: Facebook Partner Pick Request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants