Code Monkey home page Code Monkey logo

Comments (14)

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024 1

I should be releaseing support for splitChunks api in next which may improve this issue for you

from module-federation-examples.

duyphuong2101 avatar duyphuong2101 commented on June 11, 2024 1

@ScriptedAlchemy Thanks, I will try the version on my project, and whether it works well or not I will report back to you.

from module-federation-examples.

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024 1

Okay the federation package duplicaiton, this is because of how next works. We inject federation runtime into the entrypoint, i then manually use another plugin for next to hoist it into the runtime chunk, but because next uses entry routing and single runtime chunk - each entrypoint contains the runtime package. I can try and scope this down specifically for next.js by attempting to only inject federation runtime into _app.js - next is very sub-optimal unfortunately.

Regarding eager use, eager:true hoists the modules to the top of the runtime, except in next where it only hoists them to the entrypoints, not to the runtime chunks - making eager true not actually eager since its sitting in the entrypoint not the webpack runtime chunk. This is a problem in the eager + multi entry + single runtime chunk, this is a problem in webpacks core.

Instead of relying on eager to try and ensure dependnecy control id use a runtime plugin. With runtime plugins you can take control of the resolver logic of shared and you can force your remotes to always "pick" a certan shared module from another host/remote.

Look at the nextjs internal runtime plugin for example, the runtime plugin uses resolveShare which tells all remotes to prefer the hosts react and react dom, as well and the hosts next/router share over any others provided by the system. Effectively works like what youre trying to do with eager true, which is ensure that the loaded one is used.

https://github.com/module-federation/core/blob/main/packages/nextjs-mf/src/plugins/container/runtimePlugin.ts

Resolve share would let you control this deterministically.

from module-federation-examples.

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024 1

Hi @ScriptedAlchemy, I also get the same problem.

Have you had any updated on this issue?

I think that is not a small issue so if this issue is fixed, that is a most significant point at this moment.

I can not wait more time.

Does this release solve the problem?

0.0.0-next-20240424224724

from module-federation-examples.

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024

Due to bug in webpack and federation when single runtime chunk is used.

Shared modules are only hoisted up to the entrypoint level, not the runtime level - causing duplication acorss entrypoints.

from module-federation-examples.

duyphuong2101 avatar duyphuong2101 commented on June 11, 2024

Thanks @ScriptedAlchemy

from module-federation-examples.

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024

@duyphuong2101 you can try this release, i cut it with the new split chunks mods - you can see if it works better or not.
0.0.0-next-20240424224724

from module-federation-examples.

duyphuong2101 avatar duyphuong2101 commented on June 11, 2024

Hi @ScriptedAlchemy
I took version 0.0.0-next-20240424224724 and tested it on my project, but still getting the same errors. You can take my test project to check

https://github.com/duannx/mf-duplicate-bundle-size-issue/blob/master/README.md

from module-federation-examples.

ScriptedAlchemy avatar ScriptedAlchemy commented on June 11, 2024

Are you sharing lodash as eager? Don't use eager sharing

from module-federation-examples.

duannx avatar duannx commented on June 11, 2024

Hi @ScriptedAlchemy, I'm taking over for my colleague.

Yes, we are using eager. We tested with eager : false and lodash is correctly tree-shaken. But the module federation bundle is still there and is duplicated into three chunks: main, webpack, and remoteEntry. All of them are used on the page so we are loading redundant JS

I have a small concern about the eager option. So we should not use it anymore, should we? Is there any difference between eager : true and eager : false on the latest version of @module-federation/nextjs-mf? The reason that we want to use eager : true is that some modules really need to be loaded before other modules. Because they are dependencies of others in a complexity graph. I'm not sure if switching to eager : false would introduce another issue that we don't foresee

Thanks in advance!

image

from module-federation-examples.

duannx avatar duannx commented on June 11, 2024

Thank you for that. I'll give it a try

from module-federation-examples.

duannx avatar duannx commented on June 11, 2024

Hi @ScriptedAlchemy, is there any update on this issue? Thank you!

from module-federation-examples.

vunguyen10111995 avatar vunguyen10111995 commented on June 11, 2024

Hi @ScriptedAlchemy, I also get the same problem.
Have you had any updated on this issue?
I think that is not a small issue so if this issue is fixed, that is a most significant point at this moment.
I can not wait more time.

from module-federation-examples.

vunguyen10111995 avatar vunguyen10111995 commented on June 11, 2024

Hi @ScriptedAlchemy , I have checked on the new version that you provided but the issue is happened.
When I checked the the bundle on analyzer tool, I also saw the duplication of the module-federation.
Can you double check that?

from module-federation-examples.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.