From 1dd9025d44b7fb6abe6a7b71d07b63437aa4a953 Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Sun, 26 Oct 2025 10:02:06 +0100 Subject: [PATCH 1/2] fix: Only bundle types if externals available --- .../src/lib/core/build-for-federation.ts | 115 ++++++++++-------- 1 file changed, 61 insertions(+), 54 deletions(-) diff --git a/libs/native-federation-core/src/lib/core/build-for-federation.ts b/libs/native-federation-core/src/lib/core/build-for-federation.ts index 39124ebb..a0f10f4b 100644 --- a/libs/native-federation-core/src/lib/core/build-for-federation.ts +++ b/libs/native-federation-core/src/lib/core/build-for-federation.ts @@ -56,64 +56,71 @@ export async function buildForFederation( const { sharedBrowser, sharedServer, separateBrowser, separateServer } = splitShared(config.shared); - let start = process.hrtime(); - const sharedPackageInfoBrowser = await bundleShared( - sharedBrowser, - config, - fedOptions, - externals, - 'browser' - ); - logger.measure( - start, - '[build artifacts] - To bundle all shared browser externals' - ); + sharedPackageInfoCache = []; + if (Object.keys(sharedBrowser).length > 0) { + const start = process.hrtime(); + const sharedPackageInfoBrowser = await bundleShared( + sharedBrowser, + config, + fedOptions, + externals, + 'browser' + ); - start = process.hrtime(); - const sharedPackageInfoServer = await bundleShared( - sharedServer, - config, - fedOptions, - externals, - 'node' - ); - logger.measure( - start, - '[build artifacts] - To bundle all shared node externals' - ); + logger.measure( + start, + '[build artifacts] - To bundle all shared browser externals' + ); + sharedPackageInfoCache.push(...sharedPackageInfoBrowser); + } - start = process.hrtime(); - const separatePackageInfoBrowser = await bundleSeparate( - separateBrowser, - externals, - config, - fedOptions, - 'browser' - ); - logger.measure( - start, - '[build artifacts] - To bundle all separate browser externals' - ); + if (Object.keys(sharedServer).length > 0) { + const start = process.hrtime(); + const sharedPackageInfoServer = await bundleShared( + sharedServer, + config, + fedOptions, + externals, + 'node' + ); + logger.measure( + start, + '[build artifacts] - To bundle all shared node externals' + ); + sharedPackageInfoCache.push(...sharedPackageInfoServer); + } - start = process.hrtime(); - const separatePackageInfoServer = await bundleSeparate( - separateServer, - externals, - config, - fedOptions, - 'node' - ); - logger.measure( - start, - '[build artifacts] - To bundle all separate node externals' - ); + if (Object.keys(separateBrowser).length > 0) { + const start = process.hrtime(); + const separatePackageInfoBrowser = await bundleSeparate( + separateBrowser, + externals, + config, + fedOptions, + 'browser' + ); + logger.measure( + start, + '[build artifacts] - To bundle all separate browser externals' + ); + sharedPackageInfoCache.push(...separatePackageInfoBrowser); + } - sharedPackageInfoCache = [ - ...sharedPackageInfoBrowser, - ...sharedPackageInfoServer, - ...separatePackageInfoBrowser, - ...separatePackageInfoServer, - ]; + if (Object.keys(separateServer).length > 0) { + const start = process.hrtime(); + const separatePackageInfoServer = await bundleSeparate( + separateServer, + externals, + config, + fedOptions, + 'node' + ); + logger.measure( + start, + '[build artifacts] - To bundle all separate node externals' + ); + sharedPackageInfoCache.push(...separatePackageInfoServer); + } } const sharedMappingInfo = !artefactInfo From 1e2a52c0bb059c8e45fc8490b7efbbbb0c92507f Mon Sep 17 00:00:00 2001 From: Aukevanoost Date: Sun, 26 Oct 2025 10:36:32 +0100 Subject: [PATCH 2/2] fix: Re-enabled externals cache --- .../src/lib/core/build-for-federation.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libs/native-federation-core/src/lib/core/build-for-federation.ts b/libs/native-federation-core/src/lib/core/build-for-federation.ts index a0f10f4b..4ad2fe6f 100644 --- a/libs/native-federation-core/src/lib/core/build-for-federation.ts +++ b/libs/native-federation-core/src/lib/core/build-for-federation.ts @@ -25,7 +25,9 @@ export const defaultBuildParams: BuildParams = { skipShared: false, }; -let sharedPackageInfoCache: SharedInfo[] = []; +// Externals cache +const sharedPackageInfoCache: SharedInfo[] = []; +const cachedSharedPackages = new Set(); export async function buildForFederation( config: NormalizedFederationConfig, @@ -56,7 +58,6 @@ export async function buildForFederation( const { sharedBrowser, sharedServer, separateBrowser, separateServer } = splitShared(config.shared); - sharedPackageInfoCache = []; if (Object.keys(sharedBrowser).length > 0) { const start = process.hrtime(); const sharedPackageInfoBrowser = await bundleShared( @@ -71,7 +72,11 @@ export async function buildForFederation( start, '[build artifacts] - To bundle all shared browser externals' ); + sharedPackageInfoCache.push(...sharedPackageInfoBrowser); + Object.keys(sharedBrowser).forEach((packageName) => + cachedSharedPackages.add(packageName) + ); } if (Object.keys(sharedServer).length > 0) { @@ -88,6 +93,9 @@ export async function buildForFederation( '[build artifacts] - To bundle all shared node externals' ); sharedPackageInfoCache.push(...sharedPackageInfoServer); + Object.keys(sharedServer).forEach((packageName) => + cachedSharedPackages.add(packageName) + ); } if (Object.keys(separateBrowser).length > 0) { @@ -104,6 +112,9 @@ export async function buildForFederation( '[build artifacts] - To bundle all separate browser externals' ); sharedPackageInfoCache.push(...separatePackageInfoBrowser); + Object.keys(separateBrowser).forEach((packageName) => + cachedSharedPackages.add(packageName) + ); } if (Object.keys(separateServer).length > 0) { @@ -120,6 +131,9 @@ export async function buildForFederation( '[build artifacts] - To bundle all separate node externals' ); sharedPackageInfoCache.push(...separatePackageInfoServer); + Object.keys(separateServer).forEach((packageName) => + cachedSharedPackages.add(packageName) + ); } } @@ -196,6 +210,7 @@ function splitShared( const separateServer: Record = {}; for (const key in shared) { + if (cachedSharedPackages.has(key)) continue; const obj = shared[key]; if (obj.platform === 'node' && obj.build === 'default') { sharedServer[key] = obj;