-
сборка TypeScript на сервере (nest) и клиенте
-
общий роутер для сервера и клиента (router5)
-
рендеринг компонентов на сервере
-
title и meta-тэги
-
подключение клиентских бандлов
-
code splitting и ленивая загрузка бандлов
-
redux + redux observable
-
загрузка страничных данных
-
корневой роут
-
инкрементальная сборка
-
рендеринг страниц ошибок (403, 404, 500, клиентские ошибки)
-
typed i18n
-
рендеринг в stream
-
настроить линтеры и автоформатирование
-
параллельный запуск всего
-
favicon
-
вынести настройки в конфиг
-
TVM
-
авторизация
-
поход в бэкенд с проверкой формата
-
error booster на клиенте и сервере
-
логирование
-
rum, Метрика, Baobab
-
эксперименты
-
модульные тесты
-
интеграционные тесты с новой Гермионой
-
опциональный анализатор бандлов в dev реиме
-
деплой
- webpack разбивает на бандлы, если встречает динамический импорт (динамические импорты не должны заменяться лоадерами на кастомные конструкции)
- на клиенте рендеринг в 2 этапа: сначала рендерим заглушку, загружаем бандл, рендерим вместо заглушки компонент
- на сервере рендеринг синхронный и нужно предзагружать бандл
- т.к. на сервере рендерится всё сразу, а на клиенте в 2 этапа, то при гидрации получаем ошибку о том, что серверный html не соответствует клиентскому. поэтомуна клиенте тоже нужно предзагрузить начальный бандл
- в общем случае, технически трудно узнать, что именно нужно предзагрузить, но если есть ограничение, что бандлы разбиваются по страницам, то можем загрузить бандл, т.к. знаем текущую страницу