В рамках моего одностраничного приложения React мне нужно создать несколько статических HTML-страниц с большим количеством текста (политика конфиденциальности, политика файлов cookie, условия обслуживания и т. Д.). Технически это не сложно, но в целом это около 100 КБ неуминированного текста, который в конечном итоге войдет в мою начальную загрузку данных для нескольких страниц, которые когда-либо посетят 0,05% пользователей. Конечно, минификация и сжатие сократят это, но мне он все еще не нужен для начальной загрузки, поэтому я хочу избавиться от него в любом случае.

Итак, как мне загрузить этот контент асинхронно, чтобы избежать его в моем bundle.js?

Решение 1.Разделение кода Webpack 2

Вероятно, это правильный способ сделать это, но я еще не рассматривал это. Кроме того, документация Webpack по-прежнему практически не читается (но определенно лучше - хорошие ребята!), Поэтому я подумал, что это займет у меня больше времени, чем с:

Решение 2 - экспресс-рендеринг статического HTML

Я использую Google App Engine, поэтому у меня уже есть базовый сервер Node, который доставляет мои index.html. Мне просто нужно настроить еще несколько маршрутов, которые я могу fetch со стороны клиента, чтобы получить фрагменты HTML. Следующие суть должны объяснить основы.

Теперь всякий раз, когда я получаю template/templateName со стороны клиента, Express отправляет мне обратно HTML-контент для инъекции в компонент React.

ГОЧА

В этом есть одна серьезная проблема. Если вы тестируете это локально с помощью webpack-dev-server, это не сработает. Причина в том, что webpack-dev-server не является настоящим сервером (AFAIK) и не обрабатывает маршруты API. Для этого вам нужно будет запустить другой процесс локально в терминале и проксировать запрос в конфигурации вашего веб-сервера.

В моей текущей настройке у меня есть webpack-dev-server, настроенный в моей конфигурации следующим образом:

devServer: {
  contentBase: "public",
  compress: false,
  historyApiFallback: true,
  proxy: {
    "/template": "http://localhost:8080"
  },
  port: 9000
}

Таким образом, node server.js будет запускать внутренний сервер на порту 8080, а затем webpack-dev-server --watch будет работать на порту 9000, но для любого запроса к /template он попадет на внутренний сервер.