Данную проблему можно решить при помощи Module Federation. Два проекта разворачиваются на двух разных серверах и с помощью плагина moduleFederation в хостовом приложении добавляются пути до файлов remoteEntry для разных приложений
Оставлю небольшой комментарий от себя. Когда я готовил статью, у меня не было цели рассказать про разные способы и показать, чем же MF лучше или хуже. Я хотел рассказать про собственное использование и с чем мы столкнулись.
Однако судя по комментам, стоило привести сравнение, возможно сделаю это в отдельной статье
Не совсем так, сборка чанков осуществляется, когда мы кладем наше приложение на файловую систему сервера. А с помощью файлика remoteEntry мы уже забираем нужные нам чанки.
И мы сами можем рулить в какой момент какой модуль брать
Мой косяк, что не описал подробно механизм в статье. Либо здесь же исправлю, либо сделаю отдельную статью, так как и так эта подучилась большой, хотя я не супер глубоко уходил
Вот у нашей команды и стояла цель: разбить большое приложение на модули. И мы успешно перешли на MF. Тем более module federation есть не только в вебпак, энтузиасты для роллапа его сделали
Согласен, но я описал проблемы, с которыми можно столкнуться. Я сам так делал раньше, но перешел на MF, потому что он действительно слишком сильно жизнь упрощает
Обновлять одновременно не надо. Обновил дочернее, хвостовое это сразу подтянуло и ничего не сломалось.
Все это можно сделать и без MF, конечно, но MF предоставляет удобные инструменты, которые позволяют не думать о том, как развернуть, как управлять либами и так далее
Нуу, считай уже это не микрофронт) С таким подходом не удобно работать с lazy loading, библиотеки придется импортить в каждый конкретный модуль, а с помощью MF их можно передать дочернему приложению, плюс версионирование вроде как нельзя автоматическое настроить: когда залил новую версию модуля, нужно в использующем приложении либо руками поменять, либо как-то скриптом дернуть
Привет, а пробовали ли вы стор, например редакс, прокидывать в дочерние модули?
Или контексты?
Пробовал, вроде неплохо работает
Как единственный источник истины - норм подход
Ну тут проблема не микрофронтами, это то же самое, если один кусок одного приложения требует ресета, а в другой кусок этого же приложения - нет
Ресет стилей можно сделать точно также, как если бы ресет происходил в рамках одного приложения. Разбиение на микрофронты не влияет на решение
Данную проблему можно решить при помощи Module Federation. Два проекта разворачиваются на двух разных серверах и с помощью плагина moduleFederation в хостовом приложении добавляются пути до файлов remoteEntry для разных приложений
А можете подробнее объяснить насчет проблемы с метриками?
MF просто помогает проще все контролировать и управлять этим
requirejs не все может. Если нужна поддержка es6 или разные форматы модулей в одном проекте, то es6-модули и systemjs соответственно
Оставлю небольшой комментарий от себя. Когда я готовил статью, у меня не было цели рассказать про разные способы и показать, чем же MF лучше или хуже. Я хотел рассказать про собственное использование и с чем мы столкнулись.
Однако судя по комментам, стоило привести сравнение, возможно сделаю это в отдельной статье
Не совсем так, сборка чанков осуществляется, когда мы кладем наше приложение на файловую систему сервера. А с помощью файлика remoteEntry мы уже забираем нужные нам чанки.
И мы сами можем рулить в какой момент какой модуль брать
Мой косяк, что не описал подробно механизм в статье. Либо здесь же исправлю, либо сделаю отдельную статью, так как и так эта подучилась большой, хотя я не супер глубоко уходил
Вот у нашей команды и стояла цель: разбить большое приложение на модули. И мы успешно перешли на MF. Тем более module federation есть не только в вебпак, энтузиасты для роллапа его сделали
Согласен, но я описал проблемы, с которыми можно столкнуться. Я сам так делал раньше, но перешел на MF, потому что он действительно слишком сильно жизнь упрощает
Обновлять одновременно не надо. Обновил дочернее, хвостовое это сразу подтянуло и ничего не сломалось.
Все это можно сделать и без MF, конечно, но MF предоставляет удобные инструменты, которые позволяют не думать о том, как развернуть, как управлять либами и так далее
Нуу, считай уже это не микрофронт) С таким подходом не удобно работать с lazy loading, библиотеки придется импортить в каждый конкретный модуль, а с помощью MF их можно передать дочернему приложению, плюс версионирование вроде как нельзя автоматическое настроить: когда залил новую версию модуля, нужно в использующем приложении либо руками поменять, либо как-то скриптом дернуть
Имеешь в виду без использования module federation? А как подключать модули друг к другу тогда?