From cf39f1284ac4775702cc8a7a6fc0f399f48b31c0 Mon Sep 17 00:00:00 2001 From: MadaraUchiha-314 Date: Tue, 25 Jun 2024 21:37:09 -0700 Subject: [PATCH] fix: some more minor changes --- .../src/index.ts | 53 ++++++++++++------- .../src/manifest.ts | 38 ++++++------- 2 files changed, 50 insertions(+), 41 deletions(-) diff --git a/packages/rollup-plugin-module-federation/src/index.ts b/packages/rollup-plugin-module-federation/src/index.ts index 8b142b9..e82e9af 100644 --- a/packages/rollup-plugin-module-federation/src/index.ts +++ b/packages/rollup-plugin-module-federation/src/index.ts @@ -808,26 +808,39 @@ export default function federation( chunkFileNames: '[name].js', }; }, - generateBundle(options, bundle) { - const mfManifest = generateManifest({ - pkgJson, - federationConfig, - exposes, - initConfig, - federatedModuleInfo, - remoteEntryFileName, - federationRuntimeVersion: - rollupPluginModuleFederationPkgJson?.dependencies?.[ - '@module-federation/runtime' - ], - bundle, - remotesUsed, - }); - this.emitFile({ - type: 'asset', - fileName: 'mf-manifest.json', - source: JSON.stringify(mfManifest, null, 2), - }); + generateBundle(_, bundle) { + if (federationConfig?.manifest) { + if (typeof federationConfig?.getPublicPath !== 'string') { + /** + * NOTO: In rspack, they check for either publicPath or getPublicPath + * In rollup the bundler doesn't provide any avenues for the user to provide publicPath + * So we rely on user providing getPublicPath function as part of the federation config. + */ + console.warn( + 'getPublicPath is not specified. Skipping manifest generation', + ); + } else { + const mfManifest = generateManifest({ + pkgJson, + federationConfig, + exposes, + initConfig, + federatedModuleInfo, + remoteEntryFileName, + federationRuntimeVersion: + rollupPluginModuleFederationPkgJson?.dependencies?.[ + '@module-federation/runtime' + ], + bundle, + remotesUsed, + }); + this.emitFile({ + type: 'asset', + fileName: 'mf-manifest.json', + source: JSON.stringify(mfManifest, null, 2), + }); + } + } }, }; } diff --git a/packages/rollup-plugin-module-federation/src/manifest.ts b/packages/rollup-plugin-module-federation/src/manifest.ts index 1f8debc..160d889 100644 --- a/packages/rollup-plugin-module-federation/src/manifest.ts +++ b/packages/rollup-plugin-module-federation/src/manifest.ts @@ -13,11 +13,9 @@ import type { import type { PackageJson } from 'type-fest'; import type { ExposesObject, - RemotesObject, FederatedModuleInfo, FederatedModuleType, SharedOrExposedModuleInfo, - ConsumedModuleFromRemote, } from './types'; import type { OutputBundle, OutputChunk } from 'rollup'; import type { UserOptions, ShareArgs } from '@module-federation/runtime/types'; @@ -187,26 +185,24 @@ export function generateManifest({ }, [], ), - exposes: Object.entries(exposes).map( - ([exposedModuleName, exposedModuleConfig]) => ({ - id: `${instanceName}:${exposedModuleName.replace('./', '')}`, - name: exposedModuleName.replace('./', ''), - assets: { - js: getChunkMetaDataForModule( - exposedModuleName, - 'exposed', - remoteEntryFileName, - federatedModuleInfo, - bundle, - ), - css: { - async: [], - sync: [], - }, + exposes: Object.entries(exposes).map(([exposedModuleName]) => ({ + id: `${instanceName}:${exposedModuleName.replace('./', '')}`, + name: exposedModuleName.replace('./', ''), + assets: { + js: getChunkMetaDataForModule( + exposedModuleName, + 'exposed', + remoteEntryFileName, + federatedModuleInfo, + bundle, + ), + css: { + async: [], + sync: [], }, - path: exposedModuleName, - }), - ), + }, + path: exposedModuleName, + })), remotes: initConfig.remotes.reduce( (remotes, remoteConfig) => { return remotes.concat(