From cc03081ddef0e3881405b6af8753fd1edbf2fbd2 Mon Sep 17 00:00:00 2001
From: ScriptedAlchemy <zackary.l.jackson@gmail.com>
Date: Fri, 28 Feb 2025 13:29:04 -0800
Subject: [PATCH 1/3] fix(rsbuild-plugin): do not set jsonp chunk loading when
 chunk format is esm module

---
 .changeset/lovely-waves-draw.md          | 5 +++++
 packages/rsbuild-plugin/src/cli/index.ts | 5 ++++-
 2 files changed, 9 insertions(+), 1 deletion(-)
 create mode 100644 .changeset/lovely-waves-draw.md

diff --git a/.changeset/lovely-waves-draw.md b/.changeset/lovely-waves-draw.md
new file mode 100644
index 00000000000..d2a55a85993
--- /dev/null
+++ b/.changeset/lovely-waves-draw.md
@@ -0,0 +1,5 @@
+---
+'@module-federation/rsbuild-plugin': patch
+---
+
+Do not set chunkLoading to jsonp when chunkFormat is module / esm
diff --git a/packages/rsbuild-plugin/src/cli/index.ts b/packages/rsbuild-plugin/src/cli/index.ts
index 04d6454a5ae..c92643dffe9 100644
--- a/packages/rsbuild-plugin/src/cli/index.ts
+++ b/packages/rsbuild-plugin/src/cli/index.ts
@@ -134,7 +134,10 @@ export const pluginModuleFederation = (
             }
           }
 
-          if (!bundlerConfig.output?.chunkLoadingGlobal) {
+          if (
+            !bundlerConfig.output?.chunkLoadingGlobal &&
+            bundlerConfig.output?.chunkFormat !== 'module'
+          ) {
             bundlerConfig.output!.chunkLoading = 'jsonp';
           }
 

From 521856e518300837941170f0e678d8270a2dc408 Mon Sep 17 00:00:00 2001
From: ScriptedAlchemy <zackary.l.jackson@gmail.com>
Date: Mon, 10 Mar 2025 12:29:00 -0700
Subject: [PATCH 2/3] fix(rsbuild-plugin): allow override to enable mf on other
 formats

---
 .changeset/breezy-tools-serve.md         |  5 +++++
 .cursorignore                            |  9 ++-------
 packages/rsbuild-plugin/src/cli/index.ts | 25 ++++++++++++++++++------
 3 files changed, 26 insertions(+), 13 deletions(-)
 create mode 100644 .changeset/breezy-tools-serve.md

diff --git a/.changeset/breezy-tools-serve.md b/.changeset/breezy-tools-serve.md
new file mode 100644
index 00000000000..724f8b21ec5
--- /dev/null
+++ b/.changeset/breezy-tools-serve.md
@@ -0,0 +1,5 @@
+---
+'@module-federation/rsbuild-plugin': patch
+---
+
+allow override to enable mf on other formats with `forceMfOnAllFormats`
diff --git a/.cursorignore b/.cursorignore
index 2ab6da1ea8a..2b885c77ef3 100644
--- a/.cursorignore
+++ b/.cursorignore
@@ -15,8 +15,6 @@
 **/tsconfig.*
 **/*/stats.json
 
-# First ignore everything
-*
 
 # Then allow specific packages and their contents
 !packages/webpack-bundler-runtime/
@@ -25,17 +23,14 @@
 !packages/sdk/**/*
 !packages/enhanced/
 !packages/enhanced/**/*
+!packages/rsbuild-plugin/
+!packages/rsbuild-plugin/**/*
 
 # Allow package.json files
 !package.json
 !packages/*/package.json
 !**/package.json
 
-# Explicitly ignore specific packages
-packages/dts-plugin/
-packages/typescript/
-packages/native-*
-packages/core/
 packages/assemble-release-plan/
 packages/native-federation-typescript/
 packages/esbuild/
diff --git a/packages/rsbuild-plugin/src/cli/index.ts b/packages/rsbuild-plugin/src/cli/index.ts
index d7eddce2b0c..2f8e39a89f7 100644
--- a/packages/rsbuild-plugin/src/cli/index.ts
+++ b/packages/rsbuild-plugin/src/cli/index.ts
@@ -16,7 +16,14 @@ import type { RsbuildPlugin, Rspack } from '@rsbuild/core';
 import logger from '../logger';
 
 type ModuleFederationOptions =
-  moduleFederationPlugin.ModuleFederationPluginOptions;
+  moduleFederationPlugin.ModuleFederationPluginOptions & {
+    /**
+     * When set to true, Module Federation will be applied to all formats,
+     * overriding the isMFFormat check
+     * @default false
+     */
+    forceMfOnAllFormats?: boolean;
+  };
 
 export type { ModuleFederationOptions };
 
@@ -44,13 +51,19 @@ export function isMFFormat(bundlerConfig: Rspack.Configuration) {
   );
 }
 
+/**
+ * Module Federation plugin for Rsbuild
+ * @param options Plugin options
+ */
 export const pluginModuleFederation = (
   moduleFederationOptions: ModuleFederationOptions,
 ): RsbuildPlugin => ({
   name: RSBUILD_PLUGIN_MODULE_FEDERATION_NAME,
   setup: (api) => {
+    const { forceMfOnAllFormats = false, ...restOptions } =
+      moduleFederationOptions;
     const sharedOptions: [string, sharePlugin.SharedConfig][] = parseOptions(
-      moduleFederationOptions.shared || [],
+      restOptions.shared || [],
       (item, key) => {
         if (typeof item !== 'string')
           throw new Error('Unexpected array in shared');
@@ -77,7 +90,7 @@ export const pluginModuleFederation = (
         throw new Error('Can not get bundlerConfigs!');
       }
       bundlerConfigs.forEach((bundlerConfig) => {
-        if (!isMFFormat(bundlerConfig)) {
+        if (!forceMfOnAllFormats && !isMFFormat(bundlerConfig)) {
           return;
         } else {
           // mf
@@ -144,14 +157,14 @@ export const pluginModuleFederation = (
 
           // `uniqueName` is required for react refresh to work
           if (!bundlerConfig.output?.uniqueName) {
-            bundlerConfig.output!.uniqueName = moduleFederationOptions.name;
+            bundlerConfig.output!.uniqueName = restOptions.name;
           }
 
           if (
             !bundlerConfig.plugins!.find((p) => p && p.name === PLUGIN_NAME)
           ) {
             bundlerConfig.plugins!.push(
-              new ModuleFederationPlugin(moduleFederationOptions),
+              new ModuleFederationPlugin(restOptions),
             );
           }
         }
@@ -161,7 +174,7 @@ export const pluginModuleFederation = (
     // dev config only works on format: 'mf'
     api.modifyRsbuildConfig((config) => {
       // Change some default configs for remote modules
-      if (moduleFederationOptions.exposes) {
+      if (restOptions.exposes) {
         config.dev ||= {};
 
         // For remote modules, Rsbuild should send the ws request to the provider's dev server.

From c53cfe084e880173fe8a0fffacb21aa17f3f2390 Mon Sep 17 00:00:00 2001
From: ScriptedAlchemy <zackary.l.jackson@gmail.com>
Date: Tue, 11 Mar 2025 00:12:45 -0700
Subject: [PATCH 3/3] fix(rsbuild-plugin): allow override to enable mf on other
 formats

---
 .cursorignore                                    |  2 +-
 apps/website-new/docs/en/guide/basic/rsbuild.mdx | 10 ++++++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/.cursorignore b/.cursorignore
index 2b885c77ef3..6af59d7f51d 100644
--- a/.cursorignore
+++ b/.cursorignore
@@ -36,7 +36,6 @@ packages/native-federation-typescript/
 packages/esbuild/
 
 # Ignore specific directories
-apps/
 webpack/tooling/
 webpack/setup/
 webpack/test/
@@ -47,6 +46,7 @@ tools/
 .vscode/
 .verdaccio/
 
+
 # Ignore specific files
 .cursorignore
 jest.preset.js
diff --git a/apps/website-new/docs/en/guide/basic/rsbuild.mdx b/apps/website-new/docs/en/guide/basic/rsbuild.mdx
index 58df77a26ef..239b639b255 100644
--- a/apps/website-new/docs/en/guide/basic/rsbuild.mdx
+++ b/apps/website-new/docs/en/guide/basic/rsbuild.mdx
@@ -38,6 +38,8 @@ export default defineConfig({
         remote1: 'remote1@http://localhost:2001/mf-manifest.json',
       },
       shared: ['react', 'react-dom'],
+      // Optional: Force Module Federation to be applied to all formats
+      // forceMfOnAllFormats: true,
     }),
   ],
 });
@@ -81,5 +83,13 @@ export default defineConfig({
 });
 ```
 
+### Configuration Options
+
+The `pluginModuleFederation` accepts all standard Module Federation plugin options, plus these additional options:
+
+| Option | Type | Default | Description |
+|--------|------|---------|-------------|
+| `forceMfOnAllFormats` | `boolean` | `false` | When set to `true`, Module Federation will be applied to all formats, overriding the internal format check. This allows applying Module Federation even to library formats like UMD or CommonJS. |
+
 ### Note
 If you need to use the Module Federation runtime capabilities, please install [@module-federation/enhanced](/en/guide/basic/runtime.html)