diff --git a/.changeset/curvy-lamps-kneel.md b/.changeset/curvy-lamps-kneel.md new file mode 100644 index 000000000..20a46a52c --- /dev/null +++ b/.changeset/curvy-lamps-kneel.md @@ -0,0 +1,5 @@ +--- +"@callstack/repack": patch +--- + +Fix loading of 2nd level Module Federation 2 remotes diff --git a/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts b/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts index 37abd5b5b..50f4c62d4 100644 --- a/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts +++ b/packages/repack/src/modules/FederationRuntimePlugins/CorePlugin.ts @@ -27,6 +27,14 @@ const RepackCorePlugin: () => FederationRuntimePlugin = () => ({ console.error(`Failed to load remote entry: ${entryGlobalName}`); } }, + generatePreloadAssets: async () => { + // noop for compatibility + return Promise.resolve({ + cssAssets: [], + jsAssetsWithoutEntry: [], + entryAssets: [], + }); + }, }); export default RepackCorePlugin; diff --git a/packages/repack/src/plugins/ModuleFederationPluginV2.ts b/packages/repack/src/plugins/ModuleFederationPluginV2.ts index d20f33e9c..e28b925e7 100644 --- a/packages/repack/src/plugins/ModuleFederationPluginV2.ts +++ b/packages/repack/src/plugins/ModuleFederationPluginV2.ts @@ -265,14 +265,6 @@ export class ModuleFederationPluginV2 implements RspackPluginInstance { const ModuleFederationPlugin = this.getModuleFederationPlugin(compiler); - const libraryConfig = this.config.exposes - ? { - name: this.config.name, - type: 'self', - ...this.config.library, - } - : undefined; - const sharedConfig = this.adaptSharedDependencies( this.config.shared ?? this.getDefaultSharedDependencies() ); @@ -284,9 +276,12 @@ export class ModuleFederationPluginV2 implements RspackPluginInstance { this.config.runtimePlugins ); + // NOTE: we keep the default library config since it's the most compatible + // Default library config uses 'externalType': 'script' and 'type': 'var' + // var works identical to 'self' since declaring var in a global scope is + // equal to assigning to the globalObject (normalized by Re.Pack to 'self') const config: MF.ModuleFederationPluginOptions = { ...this.config, - library: libraryConfig, shared: sharedConfig, shareStrategy: shareStrategyConfig, runtimePlugins: runtimePluginsConfig,