Ответ 1
Я в одной лодке. Я начал с CRA, чтобы создать SPA, который был бы прекрасен, чтобы начать с кривой обучения. Но вскоре я понял два важных вопроса:
- Совместное использование в социальных сетях: я не смог изменить теги OGP для каждого маршрута. Эффект от этого заключается в том, что только базовый маршрут (правильно настроенный с тегами OGP) при совместном использовании в социальной сети может создать карту (твиттер), любой другой маршрут, который вы используете, будет в основном отображаться как пустая. Это справедливо и для Facebook и LinkedIn. См. Здесь.
- Оптимизация в поисковых системах: хотя было несколько статей о поисковых системах, способных правильно сканировать ваш СПА для индексации, по моему опыту это не было удовлетворительным. Например, в Google я заметил, что только домашняя страница индексируется, и она не обрабатывается правильно. Отдельные заголовки из отдельных элементов объединяются вместе. Бинг, похоже, не проиндексировал его. Может быть, Google проиндексировал его, потому что я проиндексировал домашнюю страницу с помощью Google Search Console. Это не выполнимое решение, если мне нужно повторно индексировать вручную каждую новую страницу или после обновления страницы.
Create-React-App: действительно хороший инструмент начальной загрузки, чтобы начать создавать SPA.
Gatsby/React-Static: аналогично Create-React-App, но создает вывод HTML-сборки, а значит, "предварительный рендеринг". Мне еще предстоит поэкспериментировать с этим. Я надеюсь, что это разрешит (1) и (2), так как теперь у меня теперь могут быть разные теги OGP в HTML, которые подаются со статического сервера сайта (S3/Azure Blobs/Github Pages) вместо того, чтобы их локально изменять после выборки. Я не уверен, что это будет работать. Дополнительное преимущество здесь состоит в том, что, поскольку Gatsby уже предварительно создает во время сборки, пользователь получает лучшую производительность. (Может быть, кто-то, кто испытал это с Гэтсби, может прояснить, или я отредактирую этот ответ после того, как я это сделаю.) Обновление (2/19/2018): Я могу подтвердить, что (1) решается Gatsby.js, но все еще размещается как статический Веб-сайт.
Next.js: Если Gatsby не решит (1) и (2), Next.js будет моим возвратом, чтобы создать полномасштабное приложение SSR. Проблема здесь заключается в том, что теперь мне придется использовать PaaS для размещения сайта (например, Azure Web Apps или AWS ElasticBeanStalk или Heroku) вместо статического сервиса хостинга сайтов (Azure Blob, AWS S3, Github Pages). Это будет немного дороже и немного больше работы по настройке конвейеров CI/CD.
Также см. Эти альтернативы, перечисленные в документах CRA.