From 18e8087402d25457f18c7aaf5bedcf403ff91155 Mon Sep 17 00:00:00 2001 From: ScriptedAlchemy Date: Tue, 26 Mar 2024 16:09:51 -0700 Subject: [PATCH 1/2] fix(nextjs-mf): cache bust remote urls --- .changeset/thick-birds-clap.md | 5 +++++ apps/3001-shop/pages/shop/index.tsx | 2 +- apps/3002-checkout/pages/checkout/index.tsx | 6 +++--- .../src/plugins/container/runtimePlugin.ts | 14 +++++++++++++- 4 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 .changeset/thick-birds-clap.md diff --git a/.changeset/thick-birds-clap.md b/.changeset/thick-birds-clap.md new file mode 100644 index 00000000000..cc145253497 --- /dev/null +++ b/.changeset/thick-birds-clap.md @@ -0,0 +1,5 @@ +--- +'@module-federation/nextjs-mf': patch +--- + +cache bust remote entry diff --git a/apps/3001-shop/pages/shop/index.tsx b/apps/3001-shop/pages/shop/index.tsx index 2e474f12663..ed8f5f69cc0 100644 --- a/apps/3001-shop/pages/shop/index.tsx +++ b/apps/3001-shop/pages/shop/index.tsx @@ -49,7 +49,7 @@ Shop.getInitialProps = async () => { const timeout = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - const fetchPromise = fetch('https://swapi.dev/api/people/1') + const fetchPromise = fetch('http://swapi.dev/api/planets/1/') .then((res) => res.json()) .catch((err) => { if (err instanceof Error) { diff --git a/apps/3002-checkout/pages/checkout/index.tsx b/apps/3002-checkout/pages/checkout/index.tsx index bf9241467e9..0c7a4658185 100644 --- a/apps/3002-checkout/pages/checkout/index.tsx +++ b/apps/3002-checkout/pages/checkout/index.tsx @@ -47,9 +47,9 @@ Checkout.getInitialProps = async () => { const timeout = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - const fetchPromise = fetch( - 'https://jsonplaceholder.typicode.com/todos/1', - ).then((res) => res.json()); + const fetchPromise = fetch('http://swapi.dev/api/planets/1/').then((res) => + res.json(), + ); // this will resolve after 3 seconds const timerPromise = timeout(3000).then(() => ({ diff --git a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts index b7255eca487..35cdbf650cb 100644 --- a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts +++ b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts @@ -61,7 +61,19 @@ export default function (): FederationRuntimePlugin { init(args) { return args; }, - beforeRequest(args) { + beforeRequest: (args) => { + const { options, id } = args; + const remoteName = id.split('/').shift(); + const remote = options.remotes.find( + (remote) => remote.name === remoteName, + ); + if (!remote) return args; + //@ts-ignore + if (remote?.entry?.includes('?t=')) { + return args; + } + //@ts-ignore + remote.entry = `${remote?.entry}?t=${Date.now()}`; return args; }, createScript({ url }) { From d4c9d4f5fdb6470829265353e1ec25e712673e2d Mon Sep 17 00:00:00 2001 From: ScriptedAlchemy Date: Tue, 26 Mar 2024 17:23:49 -0700 Subject: [PATCH 2/2] fix(nextjs-mf): cache bust remote urls --- .../nextjs-mf/src/plugins/container/runtimePlugin.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts index 35cdbf650cb..6266ac3ba1e 100644 --- a/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts +++ b/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts @@ -88,7 +88,12 @@ export default function (): FederationRuntimePlugin { if (!moduleOrFactory) return args; // Ensure moduleOrFactory is defined if (typeof window === 'undefined') { - let exposedModuleExports: any = moduleOrFactory(); + let exposedModuleExports: any; + try { + exposedModuleExports = moduleOrFactory(); + } catch (e) { + exposedModuleExports = moduleOrFactory; + } const handler: ProxyHandler = { get(target, prop, receiver) { @@ -142,12 +147,13 @@ export default function (): FederationRuntimePlugin { ); } }); + return () => exposedModuleExports; } else { // For objects, just wrap the exported object itself exposedModuleExports = new Proxy(exposedModuleExports, handler); } - return () => exposedModuleExports; + return exposedModuleExports; } return args;