На прошлой неделе зарелизили девятую версию фреймворка Next.js.

Улучшение в поддержке TypeScript: теперь гораздо проще перевести проект на typescript, просто меняете расширение у файла с jsx на tsx, а next dev при следующем запуске скажет какие зависимости нужно установить, сам сгенерирует tsconfig.json, а настраивать next и babel больше не нужно. Кроме этого next dev теперь в отдельном процессе проверяет ts-типы и показывает ошибки в консоли и в браузере, а next build теперь тоже будет падать, если у вас ошибка в типах. По моему это очень круто, такого уровня интеграции с TypeScript из коробки я пока больше ни у кого не видел. Кроме этого ядро самого Next.js в этом релизе переписали на typescript.

Одной из основных целей этого релиза было уменьшение причин из-за которых людям приходится создавать кастомный сервер. Таких причин было две - это динамические урлы и необходимость в каких-то обработчиках на бекенде.

Первую проблему решили с помощью имен файлов для страниц. Теперь прямо в имени можно писать динамические сегменты. Например такой путь ./pages/blog/[blogId]/comments/[commentId].js будет матчиться с таким урлом /post/1/comments/1. А значение blogId и commentId придет в getInitialProps в свойстве query.

Вторую проблему решили введением API роутов. Теперь внутри папки pages можно создать папку api и каждый файл внутри этой папки будет отдельной точкой входа для API. Для API роутов поддерживаются все возможности (включая динамические сегменты) что и для роутов страниц. Кстати, API роуты тоже проходят через babel, так что их можно писать с использованием ES6 импортов или на typescript, без дополнительных настроек.

Интересно, что обе эти фичи давно были реализованы во фреймворке Sapper - это аналог Next.js только для Svelte.

Это то, что показалось наиболее интересным для меня. Кроме этого в релизе, как обычно, много улучшений в производительности и developer experience. Подробнее описание релиза можно почитать в официальном анонсе.

На мой взгляд Next.js это очень хорошая альтернатива для старта проекта на react по сравнению с create react app. Next.js предоставляет такой же легкий (zero configuration) старт и отличный developer experience (так и не смог придумать для этого термина хороший перевод ;) как и CRA, но при этом у вас сразу из коробки есть серверный рендеринг и возможность тут же писать бекенд для своего приложения, если он вам необходим. А самое главное, Next.js в отличии от CRA, позволяет настраивать webpack и babel под ваши нужды.

В общем, если ещё не пробовали Next.js, то советую хотя бы попробывать их самоучитель.