Допустим, есть CMS, сделанная с помощью Laravel. Мы будем предоставлять разным клиентам одну и ту же CMS, обновлять их CMS при каждом выпуске, который мы создаем, но иметь файл конфигурации, который будет определять, какие функции доступны для каждого клиента. Весь бэк-офис (панель администратора и т. д.) будет в основном статическим и будет использовать Vue только для определенных динамических элементов. Это решение соответствует нашим потребностям, когда дело доходит до серверной части.
Однако мы планируем развернуть разные интерфейсы для конечных пользователей для каждого из этих клиентов. Разделить это звучит очень просто (создайте полностью отдельный проект внешнего интерфейса и используйте конечные точки API для динамического извлечения и рендеринга всего), но если бы мы полностью разделили внешний интерфейс и серверную часть, мы потеряли бы возможность отображать статические страницы с помощью Laravel Blade, и нам нужно эта функция для определенных страниц из-за скорости рендеринга, времени загрузки, SEO и т. д.
Главный вопрос: как отделить фронтенд от бэкенда для каждого клиента, не теряя возможности рендеринга страниц с помощью Laravel и Blade, сохраняя при этом простоту разработки и тестирования?
Одно из решений, которое приходит мне на ум, состоит в том, чтобы создать этап после сборки, на котором мы могли бы «объединить» клиентские файлы внешнего интерфейса в CMS, но это сделало бы процесс разработки очень трудным или даже сделало бы его практически невозможным. разрабатывать и тестировать.
Второе решение, которое приходит мне на ум, это:
- Храните все в одном репозитории Git.
- Разрабатывайте CMS в отдельной ветке и разрабатывайте только бэкэнд и бэк-офис в этой ветке и ее дочерних элементах.
- Создайте отдельные ветки (Как лучше всего для размещения нескольких проектов в репозитории git? возможно, некоторые из представленных здесь решений?) для разных интерфейсов конечного пользователя и разрабатывать только интерфейс конечного пользователя в этих ветках.
- Объедините ветку CMS с клиентскими ветками в каждом выпуске.
Это решение кажется жизнеспособным и позволит нам использовать Laravel Mix и рендеринг на стороне сервера, но оно очень подвержено человеческим ошибкам, и через некоторое время нам будет очень сложно отслеживать эти ветки. Одно из других возможных решений, о которых я читал, — это использование подмодулей Git, но мне просто трудно понять, как это работает, и кажется, что оно не такое гибкое, как должно быть в этом случае использования.
Что на самом деле было бы лучшим архитектурным решением для нас здесь?