It’s happening.
Вышел долгожданный релиз.(Я и правда ждал, после поста от Камиля на LinkedIn). Было очень интересно, как реализуют перенос на ESM, насколько это повлияет на фреймворк, у которого довольно больным местом была совместимость с ESM и существенно ушедшей вперед экосистемой JS.
Что изменилось?
Главное изменением является переход на ESM. Core пакеты теперь публикуются как ES Modules, а при создании нового проекта можно выбрать ESM сразу.
При этом существующие проекты на CJS никто мигрировать не заставляет. Благодаря require(esm) в современных версиях Node.js они продолжают работать и с NestJS 12.
Для новых ESM-проектов стек теперь выглядит заметно современнее:
- ESM
- Vitest
- Oxlint
- Rspack
- Standard Schema вместо ClassValidator/ClassTransformer
Минимальная версия Node.js тоже поднялась: нужен Node 20.19+ или 22.12+.
Сам переход на ESM давно назрел. Особенно на фоне библиотек, которые всё чаще выпускаются только в ESM, и современного тулинга в Node.js, который уже давно развивается именно в эту сторону. Очень многие пакеты из экосистемы становятся доступны прямо из коробки - и это здорово.
Для старых проектов мигрировать с CJS на ESM прямо сейчас необязательно, в то время как для новых - выбор CJS кажется сомнительным.
Что можно попробовать?
Я бы в первую очередь обратил внимание на новый подход к валидации через Standart Schema. Он позволяет использовать Zod, ArkType и другие библиотеки для валидации. С их использованием валидируемые запросы станут существенно быстрее чем при Class Validator и это здорово!
После этого можно попробовать Drizzle напрямую. Один из лучших инструментов как-никак.
А после этого использовать Vitest. Он, кстати, теперь является пакетом для тестирования по умолчанию в проектах, выбравших ESM.