A few issues with Modern.js ssr
-
Running the Modern.js SSR example in dev mode works great. But building the
hostapp fails withCannot find module 'remote/Image' or its corresponding type declarations., which can be fixed by casting the module name toany:const RemoteSSRComponent = createRemoteSSRComponent({ // `npm run build` error: Cannot find module 'remote/Image' or its corresponding type declarations. loader: () => import("remote/Image" as any),Is there a better way to fix it?
-
How does one get type hinting to work? If I add a prop to the Image component in the
providerand try using it in thehostapp on the imported<RemoteSSRComponent />, I get a type error. -
Even though TypeScript doesn't recognize the prop, it does work and is passed to the remote Image component. However, every time I change the prop from the host -- e.g. a counter increment -- I see the page flash for a split second with "Loading..." shown in place of both components before they show up again. How do I prevent this from happening?
const Index = () => { const [counter, setCounter] = React.useState(0); return ( <div className="container-box"> <button onClick={() => setCounter(counter + 1)}>+1</button> <RemoteSSRComponent counter={counter} /> <DynamicRemoteSSRComponents /> </div> ); };https://github.com/user-attachments/assets/9b06a193-12d1-457c-a794-06bb08b8b506
-
Running all three apps in dev mode works just fine, but when previewing the production build locally with
npm run servethehostfails with a CORS error:Do you know how to fix this one? I struggled to find anything online and in Modern.js docs.
-
When serving, navigating to
http://localhost:3007/mf-manifest.jsonandhttp://localhost:3008/mf-manifest.jsonshows a blank page with only404text in it. Is this normal? It doesn't happen when running in dev mode. -
When running in dev mode, I sometimes see the following
hostapp console errors:I haven't been able to consistently reproduce it. Do you know what might be causing them?
hey , for the question 1 , i can not reproduce the error in my local while executing pnpm build in host , have you executed pnpm install in root dir ?
For the question 2 , it also works on my PC , but i'm not sure whether the monorepo has wrong configuration , so i split the examples , you can try this repo
https://github.com/2heal1/basic-modernjs-ssr-demo
The remote component should have type
For the question 3 , it's a bug , i will fix it https://github.com/module-federation/core/pull/3139
For the question 4 , this need you add cors header in browser currently . And i will add one debug plugin for this case
For the question 5 , because i add devServer.headers in modernjs plugin , so it can work normally in dev mode . But this configuration can not work for modernjs serve , so it can not be accessible. This question is quite the same as question 4 , I think i can solve it by providing a modern-js-mf-debug-plugin.
For workaround, you can use serve package by executing serve dist -C -p [port] to serve provider and dynamic-provider , and pnpm serve to serve host
For question 6, it should be fixed in a preview version , i will release it next week
Because in byte , we don't use serve command usually , so i don't consider this case when i develop this feature , very glad you can help point out those issues :D
@2heal1 thank you for explanations. Can you describe what is the best way for serving SSR production apps (host and providers) with module federation plugin enabled.
Or maybe you have example repo where host and all providers are running in prod mode with npx modern deploy && node .output/index.
@2heal1 Thank you for responding here.
I think I am experiencing something similar to what @yay described in question 5. When I run dev locally everything works great but when I build and serve I also get a blank page. Ultimately, I am experiencing the same issue when deploying to Netlify and following the docs: https://modernjs.dev/en/guides/basic-features/deploy.html#netlify -- I put in a support ticket with Netlify but I think the issue is with ModernJS since I can't locally serve.
Attempting these paths returns 404s (let me know if it'd be helpful to provide the actual URLs) https://my-remote-app-example.netlify.app/mf-manifest.json https://my-remote-app-example.netlify.app/dist/mf-manifest.json
At my deployed host app: https://my-host-app.netlify.app/ I am getting:
'Failed to get manifest' error: Failed to get manifest. #RUNTIME-003
args: {"manifestUrl":"https://my-remote-app-example.netlify.app/mf-manifest.json","moduleName":"remoteDesignSystem"} https://module-federation.io/guide/troubleshooting/runtime/RUNTIME-003
In my Netlify deploy logs I see it's calling $ modern deploy as I would expect and I even see:
12:06:41 PM: dist/mf-manifest.json 23.1 kB 2.1 kB
But in the Netlify Deploy File Browser and at those URL paths above there is no mf-manifest.json to be found.
Any insight at all into this would be greatly, greatly appreciated as I want to be able to show my team a deployed proof of concept utlizing module-federation and Modern.js. Thank you kindly!