Nuxt 4.6 منتشر شد: کد سرور مستقل از Nitro و CLI جدید
خلاصهٔ کاملتر
Nuxt 4.6 با بیش از ۴۲۰ commit نسبت به v4.5.2 منتشر شد و به گفتهٔ Daniel Roe یکی از بزرگترین نسخههای فرعی Nuxt تا الانه. مهمترین تغییرش اینه که Nuxt داره server-agnostic میشه، یعنی کد سرورت دیگه به یه سرور خاص مثل Nitro گره نخورده. همزمان Nuxt CLI v4 هم اومده و چون وابستگی خود nuxt هست، با آپگرید خودکار میگیریش. Nuxt 3 هم ۳۱ جولای ۲۰۲۶ به پایان عمرش رسید و دیگه نسخهٔ 3.x جدیدی نمیاد.
تا قبل از این، composableها و کد سرور مستقیم از h3 و nitropack import میکردن. پس هر بار h3 یا Nitro یه نسخهٔ اصلی با تغییرات شکننده میداد، کل اکوسیستم ماژولها باید باهاش عوض میشد. راهحل، مسیر جدید nuxt/server هست، یعنی یه نقطهٔ import رسمی برای handlerها، middleware و ابزارهای سرور. تایپهاش روی یه RequestEvent قابلحمل و استانداردهای وب ساخته شده:
import { defineEventHandler, readValidatedBody } from 'nuxt/server'
import { z } from 'zod'
export default defineEventHandler(async (event) => {
const user = await readValidatedBody(event, z.object({ name: z.string() }))
return { created: user.name }
})پشت صحنه هنوز Nitro کار رو انجام میده، ولی کد تو مستقیم ازش import نمیکنه. یعنی همین handler روی Nitro v2، Nitro v3 و پیادهسازی آزمایشی @nuxt/vite-server (یعنی build سرور فقط با Vite Environment API) بدون تغییر اجرا میشه. تیم Nuxt میگه Nitro هنوز برای تقریباً همه بهترین انتخابه. مهاجرت هم اجباری نیست و کدی که از h3 import میکنه مثل قبل کار میکنه. فقط اگه helperهای auto-import شدهٔ h3 رو با nuxt/server قاطی کنی، خطای NUXT_E8012 میگیری که میگه کدوم import رو عوض کنی.
یه قابلیت تازه هم runtimeConfig.appSecret هست که با NUXT_APP_SECRET تنظیم میشه. ماژولها با deriveSecret(purpose) کلیدهای خودشون رو ازش میسازن، پس فقط یه secret لازم داری. اولین جایی که ازش استفاده میشه helperهای session توی nuxt/server هستن. اینها داده رو با iron رمز میکنن و توی cookie میذارن، یعنی دیگه storage سمت سرور لازم نیست.
typed $fetch هم از نو نوشته شده. قبلاً تایپها از InternalApi توی Nitro میومدن و بعد از چند صد route به خطای TS2589 (یعنی سقف عمق تایپها توی TypeScript) میخوردن. نسخهٔ جدید روی fetchdts ساخته شده و هزینهش با تعداد جاهایی که fetch صدا میزنی بالا میره، نه با تعداد routeها. مثلاً با ۱۰۰۰ route، چک تایپ از ۷.۴۴ ثانیه (همراه خطا) به ۰.۲ ثانیه رسیده و حافظه از ۹۴۶ به ۱۴۰ مگابایت اومده. body و query هر route هم حالا موقع صدا زدن چک میشه.
CLI v4 بیشتر روی nuxt dev کار کرده: یه پنل تعاملی پایین ترمینال با میانبرهای تککلیدی، یه شناسه برای هر request، و توضیح اینکه چرا سرور ریاستارت شد. حجم نصبش ۷۳٪ کمتر شده (از 13.1 به 3.5 مگابایت) و اولین paint از ۳۳۰ به ۵۰ میلیثانیه رسیده. Node.js v22.21 به بالا لازمه و nuxt init جاش رو به npm create nuxt@latest داده. پشتیبانی از Vue Vapor و صفحههای خطای جدید برای dev هم توی این نسخه هست.
نکات کلیدی:
- مسیر جدید nuxt/server کد سرور رو از نسخهٔ h3 و Nitro جدا میکنه و همون کد روی Nuxt 5 هم اجرا میشه.
- @nuxt/vite-server یه جایگزین آزمایشی برای Nitro هست، ولی Nitro همچنان پیشفرضه.
- runtimeConfig.appSecret و useSession بدون storage سمت سرور سشن میسازن.
- typed $fetch با ۱۰۰۰ route از ۷.۴۴ به ۰.۲ ثانیه رسیده و دیگه خطای TS2589 نمیده.
- @nuxt/cli v4 حدود ۷۳٪ کوچیکتره و nuxt dev تا ۶.۶ برابر سریعتر اولین paint رو نشون میده.
- Nuxt 3 از ۳۱ جولای ۲۰۲۶ دیگه پشتیبانی نمیشه.




