From 5ad75fdb51fffb9a7fadc08e30eef9071b3ca625 Mon Sep 17 00:00:00 2001 From: Ben March Date: Sun, 17 Nov 2024 14:10:41 -0600 Subject: [PATCH 1/2] feat(nextjs-mf): enable JSON manifest for NextJS (#2726) Co-authored-by: Zack Jackson Co-authored-by: Zack Jackson <25274700+ScriptedAlchemy@users.noreply.github.com> --- .changeset/red-meals-sleep.md | 5 +++ .../src/plugins/container/runtimePlugin.ts | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 .changeset/red-meals-sleep.md diff --git a/.changeset/red-meals-sleep.md b/.changeset/red-meals-sleep.md new file mode 100644 index 00000000000..99e55822dcb --- /dev/null +++ b/.changeset/red-meals-sleep.md @@ -0,0 +1,5 @@ +--- +'@module-federation/nextjs-mf': minor +--- + +Enabled JSON manifest remote protocol for NextJS plugin diff --git a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts index ee9c43c3331..049133e6f13 100644 --- a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts +++ b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts @@ -1,4 +1,8 @@ import { FederationRuntimePlugin } from '@module-federation/runtime/types'; +import { + ModuleInfo, + ConsumerModuleInfoWithPublicPath, +} from '@module-federation/sdk'; export default function (): FederationRuntimePlugin { return { @@ -182,7 +186,39 @@ export default function (): FederationRuntimePlugin { return args; }, + loadRemoteSnapshot(args) { + const { from, remoteSnapshot, manifestUrl, manifestJson, options } = args; + // ensure snapshot is loaded from manifest + if ( + from !== 'manifest' || + !manifestUrl || + !manifestJson || + !('publicPath' in remoteSnapshot) + ) { + return args; + } + + // re-assign publicPath based on remoteEntry location + if (options.inBrowser) { + remoteSnapshot.publicPath = remoteSnapshot.publicPath.substring( + 0, + remoteSnapshot.publicPath.lastIndexOf('/_next/') + 7, + ); + } else { + const serverPublicPath = manifestUrl.substring( + 0, + manifestUrl.indexOf('mf-manifest.json'), + ); + + remoteSnapshot.publicPath = serverPublicPath; + if ('publicPath' in manifestJson.metaData) { + manifestJson.metaData.publicPath = serverPublicPath; + } + } + + return args; + }, resolveShare: function (args: any) { if ( args.pkgName !== 'react' && From 9ec100313de189b61a316f134926e37417e906e0 Mon Sep 17 00:00:00 2001 From: Zhou xiao Date: Mon, 18 Nov 2024 04:30:52 +0800 Subject: [PATCH 2/2] Release v8.8.0 (#3240) Co-authored-by: github-actions[bot] --- .changeset/red-meals-sleep.md | 5 ----- packages/nextjs-mf/CHANGELOG.md | 6 ++++++ packages/nextjs-mf/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/red-meals-sleep.md diff --git a/.changeset/red-meals-sleep.md b/.changeset/red-meals-sleep.md deleted file mode 100644 index 99e55822dcb..00000000000 --- a/.changeset/red-meals-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/nextjs-mf': minor ---- - -Enabled JSON manifest remote protocol for NextJS plugin diff --git a/packages/nextjs-mf/CHANGELOG.md b/packages/nextjs-mf/CHANGELOG.md index 0dcef3c5879..f863460fa53 100644 --- a/packages/nextjs-mf/CHANGELOG.md +++ b/packages/nextjs-mf/CHANGELOG.md @@ -1,5 +1,11 @@ # @module-federation/nextjs-mf +## 8.8.0 + +### Minor Changes + +- 5ad75fd: Enabled JSON manifest remote protocol for NextJS plugin + ## 8.7.10 ### Patch Changes diff --git a/packages/nextjs-mf/package.json b/packages/nextjs-mf/package.json index a23b2408b68..8aa30936906 100644 --- a/packages/nextjs-mf/package.json +++ b/packages/nextjs-mf/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/nextjs-mf", - "version": "8.7.10", + "version": "8.8.0", "license": "MIT", "main": "dist/src/index.js", "types": "dist/src/index.d.ts",