Я работаю над приложением Lumen / React для проекта. Очевидно, что Lumen предоставляет API, а React создает пользовательский интерфейс. Теперь я пытаюсь обслуживать свое приложение React через Lumen, чтобы оно могло взять на себя всю работу с пользовательским интерфейсом.
Я хочу, чтобы клиентская часть приложения оставалась максимально ограниченной, чтобы я мог легко переключаться с Lumen на Koa или любой другой бэкэнд в будущем, если я захочу. Структура моего приложения выглядит примерно так:
Как видите, в настоящее время приложение React является подпапкой репозитория. Это то, что я делал с предыдущими проектами Koa, однако из-за характера веб-сервисов Nodejs это значительно упростило обслуживание этих файлов.
Судя по результатам моего тестирования, я считаю, что лучший способ обслуживания файлов - это прочитать содержимое index.html из клиентской папки, либо / build, либо / public, в зависимости от того, включено ли производство. Затем мне нужно будет перенаправить запросы ресурсов за пределы общей папки, установленной веб-сервером, в / build или / src в клиентской папке, опять же, в зависимости от того, находится ли он в производстве.
Мои вопросы:
A) Возможно ли это безопасным и надежным способом?
Б) Это лучший способ обслуживания приложения React через Lumen?
Я действительно не хочу поддерживать два репозитория, а также обслуживать контент двумя разными способами. В дополнение к этому, система аутентификации, которую я использую, предоставленная другим поставщиком, работала бы намного лучше, если бы все обслуживалось через приложение Lumen. Есть другой подходящий способ?






Возможно, не самое приятное решение, но я просто написал свои собственные сценарии для развертывания собранной версии в файлах Lumen после запуска сценария сборки.
Разработка может быть выполнена с помощью прокси-сервера React.
const copydir = require('copy-dir');
const fs = require('fs');
copydir.sync('./build', '../public');
fs.readFile('./build/index.html', 'utf8', function (err, data) {
if (err) throw err;
fs.writeFile ('../resources/views/index.php', data, function(err) {
if (err) throw err;
});
});
В наши дни большинство людей используют их в виде отдельных репозиториев, что помогает переключить бэкэнд и со временем делает репо менее громоздким. Кроме того, в конце дня ваш клиент просто создает статические ресурсы, которые можно обслуживать в CDN, все, что ему нужно знать, - это базовый URL-адрес API.