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..6266ac3ba1e 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 }) { @@ -76,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) { @@ -130,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;