5 shipped the ability for one bundle to load modules from another at runtime, which is genuinely novel and solves a problem most applications do not have.
new ModuleFederationPlugin({
name: 'shop',
remotes: { checkout: 'checkout@https://cdn.example/remote.js' },
shared: { react: { singleton: true, requiredVersion: '^17.0.0' } },
});
// what it costs:
// a shared dependency version negotiated at RUNTIME
// a remote that can be down, or stale, or incompatible
// debugging across two builds you did not build together
The problem it solves is several teams deploying parts of one page independently, which is a real problem at a particular size and is not the problem of a team of four. The singleton negotiation is where it gets interesting and where it fails: two remotes wanting incompatible React versions is a runtime error in production rather than a build failure. Knowing it exists is worth more in 2020 than adopting it.