feat(core): add Module Federation compatibility mode - #1407
Conversation
Update the federation example pins to the latest pkg.pr.new canary published from module-federation/core#4320, and backfill the missing tarball integrity hashes in the lockfile so frozen installs pass with pnpm >= 11.4.
Deploying rstest with
|
| Latest commit: |
35b9ec2
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://995489b4.rstest.pages.dev |
| Branch Preview URL: | https://feat-federation-v2.rstest.pages.dev |
pkg.pr.new preview
|
Rsdoctor Bundle Diff AnalysisFound 13 projects in monorepo, 4 projects with changes. 📊 Quick Summary
📋 Detailed Reports (Click to expand)📁 browserPath:
📦 Download Diff Report: browser Bundle Diff 📁 browser-uiPath:
📦 Download Diff Report: browser-ui Bundle Diff 📁 core/browserPath:
📦 Download Diff Report: core/browser Bundle Diff 📁 core/mainPath:
📦 Download Diff Report: core/main Bundle Diff Generated by Rsdoctor GitHub Action |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 40086e4ff7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- drop the stale `__rstest_dynamic_import__` global when a reused worker (`isolate: false`) runs a non-federation file after a federation one - wrap a pre-existing `__webpack_require__.f` with the same chunk-handler guard proxy so the Module Federation node runtime cannot overwrite `readFileVm` / `require` in that runtime-module ordering - remove the dead local `__rstest_dynamic_import__` binding flagged by code scanning: the runtime module is IIFE-isolated, so only the global is observable
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 510f431fba
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
State that federation: true requires the unreleased @rstest/core federation build (web-infra-dev/rstest#1407, pkg.pr.new canary), declare the rstest:federation plugin name a stable public contract, and reword the provenance blurb: the package is rstest federation mode's companion plugin, not an extraction from @rstest/core.
Install the pkg.pr.new canaries from web-infra-dev/rstest#1407 (commit 40086e4) for @rstest/core, browser, browser-react, and the rsbuild/rslib adapters so the demos' federation: true flag exercises real rstest federation support instead of being a silent no-op on 0.8.x. Bump @rsbuild/core and @rsbuild/plugin-react to the 2.x line the canary uses and document the required pairing in the demo configs.
…back Raw absolute specifiers (`C:\...`) reach native `import()` when federated async-node chunks call the global fallback; convert them through `pathToFileURL` like `resolveDynamicImport.ts` does so Windows drive letters are not parsed as URL schemes.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bedbf1a056
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The hook closure binds `import()` to the vm dynamic-import context of the bundle that installed it, so a worker reused with `isolate: false` must not carry the previous file's hook into the next federation-enabled file. Drop it unconditionally in `preparePool`; `mockRuntimeCode.js` reinstalls a fresh one bound to the current bundle.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 773bf1f044
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
pkg.pr.new preview
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 309d3b9b59
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # pnpm-lock.yaml
# Conflicts: # pnpm-lock.yaml
|
@ScriptedAlchemy hey, the |
# Conflicts: # packages/browser/src/hostController.ts # packages/core/src/core/runTests.ts # packages/core/src/pool/index.ts # packages/core/src/runtime/worker/globalSetupWorker.ts # pnpm-lock.yaml
e2cd803 to
409e8e9
Compare
9aoy
left a comment
There was a problem hiding this comment.
I found five issues in the current federation implementation. Details are included inline.
|
@ScriptedAlchemy The feature looks good to me within its current scope. One follow-up question: are there plans to support federation compatibility with ESM output ( @fi3ework , do you have any additional suggestions or concerns about this PR? Also, it looks like CI is currently failing. Could you please take a look? |
|
@ScriptedAlchemy hi Zack, i recently did some refactoring on browser mode to make it more isomorphic with node mode. the last expected refactor has just been merged, so could you please resolve the conflicts again, sorry for another around of rebase. i'm thinking that in order to better release this feature (which is a huge one) and minimize the need for frequent rebasing on your end, should we mark federation in the config as experimental jsdoc and comment out the page routes in the docs? this way, we can verify it in more repositories before making the API and documentation public to users. overall, this would allow us to strike a better balance between development speed and quality. WDYT. |
# Conflicts: # pnpm-lock.yaml
# Conflicts: # pnpm-lock.yaml
|
🎉 |
Summary
Rstest's Node test runtime overrides
import()and webpack chunk handlers for mocking, which breaks tests that load Module Federation remotes. This PR adds an opt-in federation compatibility mode so federated apps can be tested in Node:federation: booleanconfig option and--federationCLI flag.mockRuntimeCode.js, gated onglobalThis.__rstest_federation__: a placeholder chunk-handler bootstrap, an__rstest_dynamic_import__fallback for non-mocked specifiers, and a__webpack_require__.fProxy guard so federation's chunk loaders coexist with the mock runtime.examples/federation), 8 unit tests, an e2e suite with 3 fixtures, and bilingual docs.This mode pairs with the
@module-federation/rstestRsbuild plugin (module-federation/core#4320); the examples pin its latest pkg.pr.new canary (1b77b1a). Browser mode is unaffected. Supersedes #842.Validation: lint, typecheck, build, unit tests, e2e, and federation examples all pass locally (webkit e2e skipped: missing system deps).
Related Links
Checklist