NestJS 12 با هستهٔ ESM منتشر شد
خلاصهٔ کاملتر
تیم NestJS از انتشار رسمی نسخهٔ ۱۲ خبر داده و به گفتهٔ خودشون این بزرگترین آپدیت پلتفرم تو چند سال اخیره. تیتر اصلی این نسخه اینه که پکیجهای هستهٔ فریمورک حالا به شکل ESM منتشر میشن، یعنی همون سیستم ماژول استاندارد جاوااسکریپت با import و export. تو اعلامیه اومده که این یکی از پرتکرارترین درخواستهای تاریخ پروژه بوده.
نکتهٔ مهم اینه که این تغییر برای کد خودت اختیاریه. Node.js جدید از require(esm) پشتیبانی میکنه، پس پروژهٔ CommonJS بعد از آپدیت همونطور که هست کار میکنه. دستور تازهٔ nest upgrade هم وابستگیها رو بالا میبره ولی عمداً سورسهای تو رو به ESM تبدیل نمیکنه. اگه خودت بخوای مهاجرت کنی، چند قدم مشخص داره: اضافهکردن "type": "module" به package.json، تنظیم nodenext تو tsconfig و گذاشتن پسوند .js روی importهای نسبی.
برای پروژهٔ جدید، CLI ازت میپرسه CommonJS میخوای یا ESM و ابزار پیشفرض هم فرق میکنه: مسیر ESM با Vitest و oxlint ساخته میشه و مسیر CJS همون Jest و ESLint رو نگه میداره. تو مونوریپوها هم Rspack جای webpack نشسته و فلگهای --webpack منسوخ شدن. نویسنده میگه اگه به پلاگینهای خاص webpack وابستهای، اولین چیزی که موقع آپگرید باید بررسی کنی همینه. کامپایلر پیشفرض پروژههای معمولی هنوز tsc مونده.
یکی از جذابترین اضافهشدهها پشتیبانی از Standard Schema هست، یعنی یه قرارداد مشترک که کتابخونههای اعتبارسنجی مثل Zod و Valibot و ArkType رعایتش میکنن. حالا دکوریتورهای @Body() و @Query() و @Param() یه گزینهٔ schema میگیرن:
@Post()
create(@Body({ schema: createCatSchema }) createCatDto: CreateCatDto) {
return this.catsService.create(createCatDto);
}تو مقاله تأکید شده این جایگزین class-validator نیست و فقط یه گزینهٔ دیگهست برای تیمهایی که رویکرد schema-first رو ترجیح میدن.
اضافهٔ مهم دیگه SDK رسمی @nestjs/observe هست که بهجای وصلکردن یه ایجنت عمومی Node.js به پروسه، مستقیم به چرخهٔ عمر خود Nest هوک میشه و کنترلرها، اینترسپتورها، ریزالورها و مصرفکنندههای صف رو خودکار رصد میکنه. کنار اون، خطاها حالا میتونن یه کد ماشینخوان داشته باشن تا مصرفکنندهٔ API مجبور نباشه متن پیام رو پارس کنه:
throw new BadRequestException('Invalid payload', {
errorCode: 'CATS-0001',
});نکات کلیدی:
- پکیجهای هستهٔ NestJS 12 حالا ESM هستن، ولی پروژههای CommonJS با require(esm) بدون بازنویسی کار میکنن.
- پروژههای جدید ESM با Vitest و oxlint ساخته میشن؛ مسیر CJS همون Jest و ESLint رو نگه داشته و @nestjs/testing مستقل از تسترانره.
- Rspack بندلر پیشفرض مونوریپوهاست و فلگهای --webpack و --webpackPath منسوخ شدن.
- لاگر پیشفرض آبجکتهای اضافی رو بهصورت ساختاریافته زیر کلید params لاگ میکنه؛ با گزینهٔ flattenParams میشه صافشون کرد.
- دو گزینهٔ routeConflictPolicy و routeResolutionStrategy مسیرهای تکراری و سایهافتاده رو تشخیص میدن.
- سمت میکروسرویس: پشتیبانی از NATS v3 با کلاینت @nats-io/transport-node، الگوی regex برای تاپیکهای Kafka و فیلتر استثنای اختصاصی gRPC.
- GraphiQL جای playground قدیمی نشسته و subscriptions-transport-ws حذف شده.
- اجرای NestJS 12 حداقل Node.js نسخهٔ 20.19 یا 22.12 میخواد.




