From 2152285c4164485731ae3e7896f23f068ffe1a8b Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 22 Oct 2024 14:16:26 +0800 Subject: [PATCH] fix: failed to load MF remote modules when using `server.base` (#3790) --- e2e/cases/module-federation/index.test.ts | 39 +++++++++++++++++++ packages/core/src/plugins/moduleFederation.ts | 3 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/e2e/cases/module-federation/index.test.ts b/e2e/cases/module-federation/index.test.ts index c853b8b506..809de29540 100644 --- a/e2e/cases/module-federation/index.test.ts +++ b/e2e/cases/module-federation/index.test.ts @@ -54,6 +54,45 @@ rspackOnlyTest( }, ); +rspackOnlyTest( + 'should run module federation in development mode with server.base', + async ({ page }) => { + writeButtonCode(); + + const remotePort = await getRandomPort(); + + process.env.REMOTE_PORT = remotePort.toString(); + + const remoteApp = await dev({ + cwd: remote, + rsbuildConfig: { + server: { + base: '/remote', + }, + }, + }); + const hostApp = await dev({ + cwd: host, + rsbuildConfig: { + server: { + base: '/host', + }, + }, + }); + + await gotoPage(page, remoteApp); + await expect(page.locator('#title')).toHaveText('Remote'); + await expect(page.locator('#button')).toHaveText('Button from remote'); + + await gotoPage(page, hostApp); + await expect(page.locator('#title')).toHaveText('Host'); + await expect(page.locator('#button')).toHaveText('Button from remote'); + + await hostApp.close(); + await remoteApp.close(); + }, +); + rspackOnlyTest( 'should allow remote module to perform HMR', async ({ page }) => { diff --git a/packages/core/src/plugins/moduleFederation.ts b/packages/core/src/plugins/moduleFederation.ts index 88e25896c3..0f1c14d381 100644 --- a/packages/core/src/plugins/moduleFederation.ts +++ b/packages/core/src/plugins/moduleFederation.ts @@ -1,7 +1,6 @@ import { isRegExp } from 'node:util/types'; import { rspack } from '@rspack/core'; import type { RspackPluginInstance } from '@rspack/core'; -import { DEFAULT_ASSET_PREFIX } from '../constants'; import type { CacheGroup, RsbuildPlugin, Rspack } from '../types'; /** @@ -115,7 +114,7 @@ export function pluginModuleFederation(): RsbuildPlugin { const originalConfig = api.getRsbuildConfig('original'); if ( originalConfig.dev?.assetPrefix === undefined && - config.dev.assetPrefix === DEFAULT_ASSET_PREFIX + config.dev.assetPrefix === config.server?.base ) { config.dev.assetPrefix = true; }