Где бы монорепа точно пригодилась



В webpack module federation есть такая штука как shared dependencies. Мы указываем в головном приложении, что у нас есть один экземпляр
react
, один
react-dom
, один
react-router-dom
и что эти синглтоны шарятся между всеми модулями.

Вот как-то так





new ModuleFederationPlugin({

name: 'host',

shared: {

react: { singleton: true, requiredVersion: dependencies.react, eager: true },

'react-dom': { singleton: true, requiredVersion: dependencies['react-dom'], eager: true },

'react-router-dom': {

singleton: true,

requiredVersion: dependencies['react-router-dom'],

eager: true,

}

},





Теперь каждый подключаемый модуль не будет тащить свою версию реакта, а использовать общую. Красиво, но есть проблема обновлений зависимостей.



Во-первых, само по себе обновление может стать болезненным, если в мажоре библиотеки сломают API (привет react-router) так, что старый код не сможет работать с новым API. Т.е. ставим условный react 19 и наш подключаемый модуль ломается, нам нужно переписать и релизнуть новые версии микрофронтов максимально быстро вслед за хостом (что для многих проектов просто недопустимо).



Во-вторых, весьма болезненно ходить по полирепе, останавливать релизы, вносить правки в зависимости и код каждого отдельного микрофронта, а после массово релизить.



В монорепозитории очевидно можно протащить это за один PR.