نکست جیاس ۱۶ (بتا) اکنون در دسترس است. این نسخه اولیه دسترسی به آخرین بهبودها در توربوپک، کشینگ و معماری نکست جیاس را قبل از انتشار نسخه پایدار فراهم میکند. برجستهترین ویژگیهای این نسخه عبارتند از:
terminal
# Use the automated upgrade CLI
npx @next/codemod@canary upgrade beta
# ...or upgrade manually
npm install next@beta react@latest react-dom@latest
# ...or start a new project
npx create-next-app@beta
توربوپک (پایدار)
توربوپک به پایداری برای هر دو ساخت توسعه و تولید رسیده است و اکنون bundler پیشفرض برای تمام پروژههای جدید نکست جیاس است. از زمان انتشار بتای آن در اوایل تابستان، پذیرش آن به سرعت افزایش یافته است: بیش از ۵۰٪ جلسات توسعه و ۲۰٪ ساختهای تولید در نکست جیاس ۱۵.۳+ قبلاً روی توربوپک اجرا میشوند.
با توربوپک، میتوانید انتظار داشته باشید:
- ۲–۵ برابر ساختهای تولید سریعتر
- تا ۱۰ برابر Fast Refresh سریعتر
ما توربوپک را پیشفرض میکنیم تا این بهبودهای عملکرد را به هر توسعهدهنده نکست جیاس برسانیم، بدون نیاز به پیکربندی. برای اپهایی با تنظیمات سفارشی webpack، میتوانید همچنان از webpack استفاده کنید با اجرای:
terminal
next dev --webpack
next build --webpack
کشینگ فایلسیستم توربوپک (بتا)
توربوپک اکنون از کشینگ فایلسیستم در توسعه پشتیبانی میکند، که artifacts کامپایلر را روی دیسک بین اجرا ذخیره میکند تا زمانهای کامپایل به طور قابل توجهی در restarts سریعتر شود، به ویژه در پروژههای بزرگ.
کشینگ فایلسیستم را در پیکربندی خود فعال کنید:
next.config.ts
const nextConfig = {
experimental: {
turbopackFileSystemCacheForDev: true,
},
};
export default nextConfig;
تمام اپهای داخلی ورسل قبلاً از این ویژگی استفاده میکنند و ما بهبودهای قابل توجهی در بهرهوری توسعهدهندگان در مخازن بزرگ مشاهده کردهایم.
ما دوست داریم بازخورد شما را در مورد کشینگ فایلسیستم بشنویم. لطفاً آن را امتحان کنید و تجربیات خود را به اشتراک بگذارید.
create-next-app سادهشده
create-next-app
با جریان راهاندازی سادهشده، ساختار پروژه بهروز شده و پیشفرضهای بهبودیافته بازطراحی شده است. الگوی جدید به طور پیشفرض شامل App Router، پیکربندی TypeScript-first، Tailwind CSS و ESLint است.
API آداپترهای ساخت (آلفا)
پس از RFC آداپترهای ساخت، ما با جامعه و پلتفرمهای استقرار همکاری کردیم تا اولین نسخه آلفای API آداپترهای ساخت را ارائه دهیم.
آداپترهای ساخت به شما اجازه میدهند آداپترهای سفارشی ایجاد کنید که به فرآیند ساخت متصل شوند و به پلتفرمهای استقرار و ادغامهای ساخت سفارشی اجازه دهند پیکربندی نکست جیاس را تغییر دهند یا خروجی ساخت را پردازش کنند.
next.config.js
const nextConfig = {
experimental: {
adapterPath: require.resolve('./my-adapter.js'),
},
};
module.exports = nextConfig;
بازخورد خود را در بحث RFC به اشتراک بگذارید.
پشتیبانی کامپایلر React (پایدار)
پشتیبانی داخلی از کامپایلر React اکنون در نکست جیاس ۱۶ پایدار است، پس از انتشار ۱.۰ کامپایلر React. کامپایلر React به طور خودکار کامپوننتها را memoize میکند و re-renderهای غیرضروری را بدون هیچ تغییر دستی در کد کاهش میدهد.
گزینه پیکربندی reactCompiler
از experimental
به پایدار ارتقا یافته است. آن به طور پیشفرض فعال نیست زیرا ما همچنان دادههای عملکرد ساخت را در انواع مختلف اپلیکیشنها جمعآوری میکنیم. انتظار داشته باشید زمانهای کامپایل در توسعه و ساخت بالاتر باشد وقتی این گزینه را فعال میکنید، زیرا کامپایلر React به Babel وابسته است.
next.config.ts
const nextConfig = {
reactCompiler: true,
};
export default nextConfig;
آخرین نسخه پلاگین کامپایلر React را نصب کنید:
terminal
npm install babel-plugin-react-compiler@latest
ویژگیهای اصلی و معماری
مسیریابی و ناوبری بهبودیافته
نکست جیاس ۱۶ شامل بازنگری کامل سیستم مسیریابی و ناوبری است که انتقال صفحات را سبکتر و سریعتر میکند.
تکرارزدایی Layout: وقتی چندین URL با یک layout مشترک prefetch میشود، layout یک بار دانلود میشود به جای جداگانه برای هر Link. برای مثال، یک صفحه با ۵۰ لینک محصول اکنون layout مشترک را یک بار دانلود میکند به جای ۵۰ بار، که اندازه انتقال شبکه را به طور چشمگیری کاهش میدهد.
Prefetching افزایشی: نکست جیاس فقط بخشهایی را که قبلاً در کش نیستند prefetch میکند، به جای صفحات کامل. کش prefetch اکنون:
- درخواستها را وقتی لینک از viewport خارج میشود لغو میکند
- prefetch لینکها را در hover یا وقتی دوباره وارد viewport میشود اولویتبندی میکند
- لینکها را وقتی دادههایشان نامعتبر میشود دوباره prefetch میکند
- به طور seamless با ویژگیهای آینده مانند Cache Components کار میکند
تجارت: ممکن است درخواستهای prefetch فردی بیشتری ببینید، اما با اندازههای انتقال کل بسیار کمتر. ما باور داریم این تجارت مناسب برای تقریباً تمام اپلیکیشنهاست. اگر تعداد درخواستهای افزایشیافته مشکلی ایجاد کند، لطفاً به ما اطلاع دهید. ما در حال کار روی بهینهسازیهای اضافی برای inline کردن chunkهای داده به طور کارآمدتر هستیم.
این تغییرات هیچ تغییری در کد نیاز ندارند و برای بهبود عملکرد در تمام اپها طراحی شدهاند.
PPR و Cache Components
نکست جیاس ۱۶ پرچم experimental Partial Pre-Rendering (PPR) و گزینههای پیکربندی را حذف میکند. PPR در حال ادغام در Cache Components است.
از نکست جیاس ۱۶، میتوانید با استفاده از پیکربندی experimental.cacheComponents
به PPR opt-in کنید. تفاوتهایی در پیادهسازی وجود دارد و Cache Components ویژگیها و رفتارهای اضافی میآورد که قبل از Next.js Conf و انتشار پایدار نکست جیاس ۱۶ مستند و اعلام خواهد شد.
اگر اپلیکیشن شما به PPR (experimental.ppr = true
) وابسته است: روی نسخه pinned نکست جیاس canary
که اکنون استفاده میکنید بمانید. اگر در مهاجرت مشکل دارید، فعلاً روی نسخه فعلی بمانید و ما راهنمای مهاجرت را قبل از انتشار پایدار ارائه خواهیم داد.
APIهای کشینگ بهبودیافته
نکست جیاس ۱۶ APIهای کشینگ تصفیهشدهای را معرفی میکند برای کنترل صریحتر بر رفتار کش.
revalidateTag() (بهروز شده)
revalidateTag()
اکنون پروفایل cacheLife را به عنوان آرگومان دوم نیاز دارد تا رفتار stale-while-revalidate (SWR) را فعال کند:
import { revalidateTag } from 'next/cache';
// Use built-in cacheLife profile (we recommend 'max' for most cases)
revalidateTag('blog-posts', 'max');
// Or use other built-in profiles
revalidateTag('news-feed', 'hours');
revalidateTag('analytics', 'days');
// Or use an inline object with a custom revalidation time
revalidateTag('products', { revalidate: 3600 });
// Deprecated - single argument form
revalidateTag('blog-posts');
آرگومان پروفایل نامهای پروفایل cacheLife
داخلی (مانند 'max'
, 'hours'
, 'days'
) یا پروفایلهای سفارشی تعریفشده در next.config
را میپذیرد. همچنین میتوانید یک شیء inline { revalidate: number }
پاس کنید. ما 'max'
را برای اکثر موارد توصیه میکنیم، زیرا revalidation پسزمینه را برای محتوای بلندمدت فعال میکند. وقتی کاربران محتوای تگشده را درخواست میکنند، دادههای کششده را بلافاصله دریافت میکنند در حالی که نکست جیاس در پسزمینه revalidate میکند.
از revalidateTag()
استفاده کنید وقتی میخواهید فقط ورودیهای کش تگشده مناسب را با رفتار stale-while-revalidate نامعتبر کنید. این برای محتوای استاتیک ایدهآل است که میتواند eventual consistency را تحمل کند.
راهنمایی مهاجرت: آرگومان دوم را با یک پروفایل cacheLife
(ما 'max'
را توصیه میکنیم) برای رفتار SWR اضافه کنید، یا از updateTag()
در Server Actions اگر به semantics read-your-writes نیاز دارید استفاده کنید.
updateTag() (جدید)
updateTag()
یک API جدید فقط برای Server Actions است که semantics read-your-writes را فراهم میکند، کش را expire و بلافاصله در همان درخواست تازه میکند:
'use server';
import { updateTag } from 'next/cache';
export async function updateUserProfile(userId: string, profile: Profile) {
await db.users.update(userId, profile);
// Expire cache and refresh immediately - user sees their changes right away
updateTag(`user-${userId}`);
}
این تضمین میکند که ویژگیهای تعاملی تغییرات را بلافاصله منعکس کنند. عالی برای فرمها، تنظیمات کاربر و هر workflowی که کاربران انتظار میبرند تغییرات خود را فوراً ببینند.
refresh() (جدید)
refresh()
یک API جدید فقط برای Server Actions است برای تازه کردن دادههای uncached فقط. اصلاً به کش دست نمیزند:
'use server';
import { refresh } from 'next/cache';
export async function markNotificationAsRead(notificationId: string) {
// Update the notification in the database
await db.notifications.markAsRead(notificationId);
// Refresh the notification count displayed in the header
// (which is fetched separately and not cached)
refresh();
}
این API مکمل router.refresh()
سمت کلاینت است. از آن استفاده کنید وقتی نیاز به تازه کردن دادههای uncached نمایشدادهشده در جای دیگری از صفحه پس از انجام یک action دارید. shellهای صفحه کششده و محتوای استاتیک شما سریع باقی میمانند در حالی که دادههای دینامیک مانند شمارش اعلانها، معیارهای زنده یا نشانگرهای وضعیت تازه میشوند.
React 19.2 و ویژگیهای Canary
App Router در نکست جیاس ۱۶ از آخرین انتشار Canary React استفاده میکند، که شامل ویژگیهای تازه منتشرشده React 19.2 و ویژگیهای دیگر در حال پایدارسازی تدریجی است. برجستهترینها عبارتند از:
- View Transitions: انیمیشن عناصری که داخل یک Transition یا ناوبری بهروز میشوند
- useEffectEvent: استخراج منطق non-reactive از Effects به توابع Effect Event قابل استفاده مجدد
- Activity: رندر “فعالیت پسزمینه” با پنهان کردن UI با
display: none
در حالی که state را حفظ و Effects را تمیز میکند
بیشتر در اعلام React 19.2 بیاموزید.
تغییرات شکستنده و بهروزرسانیهای دیگر
الزامات نسخه
تغییر | جزئیات |
---|---|
Node.js 20.9+ | حداقل نسخه اکنون ۲۰.۹.۰ (LTS)؛ Node.js 18 دیگر پشتیبانی نمیشود |
TypeScript 5+ | حداقل نسخه اکنون ۵.۱.۰ |
مرورگرها | Chrome 111+، Edge 111+، Firefox 111+، Safari 16.4+ |
حذفها
این ویژگیها قبلاً deprecated بودند و اکنون حذف شدهاند:
حذفشده | جایگزین |
---|---|
پشتیبانی AMP | تمام APIها و configهای AMP حذف شدهاند (useAmp , export const config = { amp: true } ) |
دستور next lint | مستقیماً از Biome یا ESLint استفاده کنید؛ next build دیگر linting را اجرا نمیکند. یک codemod در دسترس است: npx @next/codemod@canary next-lint-to-eslint-cli . |
گزینههای devIndicators | appIsrStatus , buildActivity , buildActivityPosition از config حذف شدهاند. نشانگر باقی میماند. |
serverRuntimeConfig , publicRuntimeConfig | از متغیرهای محیطی (فایلهای .env ) استفاده کنید |
مکان experimental.turbopack | config به سطح بالا turbopack منتقل شده (دیگر در experimental نیست) |
پرچم experimental.dynamicIO | به experimental.cacheComponents تغییر نام داده شده |
پرچم experimental.ppr | پرچم PPR حذف شده؛ در حال تکامل به مدل برنامهنویسی Cache Components |
export const experimental_ppr | export سطح route PPR حذف شده؛ در حال تکامل به مدل برنامهنویسی Cache Components |
scroll-behavior: smooth خودکار | data-scroll-behavior="smooth" را به سند HTML اضافه کنید تا opt-in کنید |
unstable_rootParams() | ما در حال کار روی API جایگزین هستیم که در یک minor آینده ارسال خواهیم کرد |
دسترسی sync به props params , searchParams | باید async استفاده کنید: await params , await searchParams |
دسترسی sync به cookies() , headers() , draftMode() | باید async استفاده کنید: await cookies() , await headers() , await draftMode() |
آرگومان params route تصویر Metadata | به async params تغییر کرده؛ id از generateImageMetadata اکنون Promise<string> |
src محلی next/image با query strings | اکنون config images.localPatterns نیاز دارد تا حملات enumeration را جلوگیری کند |
تغییرات رفتاری
این ویژگیها رفتارهای پیشفرض جدیدی در نکست جیاس ۱۶ دارند:
رفتار تغییر یافته | جزئیات |
---|---|
bundler پیشفرض | توربوپک اکنون bundler پیشفرض برای تمام اپهاست؛ با next build --webpack opt-out کنید |
پیشفرض images.minimumCacheTTL | از ۶۰ ثانیه به ۴ ساعت (۱۴۴۰۰ ثانیه) تغییر کرده؛ هزینه revalidation را برای تصاویر بدون هدرهای cache-control کاهش میدهد |
پیشفرض images.imageSizes | 16 از اندازههای پیشفرض حذف شده (فقط توسط ۴.۲٪ پروژهها استفاده میشود)؛ اندازه srcset و تغییرات API را کاهش میدهد |
پیشفرض images.qualities | از [1..100] به [75] تغییر کرده؛ prop quality اکنون به نزدیکترین مقدار در images.qualities coerced میشود |
images.dangerouslyAllowLocalIP | محدودیت امنیتی جدید به طور پیشفرض بهینهسازی IP محلی را بلاک میکند؛ فقط برای شبکههای خصوصی به true تنظیم کنید |
پیشفرض images.maximumRedirects | از نامحدود به حداکثر ۳ redirect تغییر کرده؛ به 0 تنظیم کنید تا غیرفعال یا برای موارد نادر افزایش دهید |
پیشفرض @next/eslint-plugin-next | اکنون به فرمت Flat Config ESLint پیشفرض میشود، همخوانی با ESLint v10 که پشتیبانی config legacy را حذف میکند |
رفتار کش prefetch | بازنویسی کامل با تکرارزدایی layout و prefetching افزایشی |
امضای revalidateTag() | اکنون پروفایل cacheLife را به عنوان آرگومان دوم برای رفتار stale-while-revalidate نیاز دارد |
پیکربندی Babel در توربوپک | اگر config babel پیدا شود، Babel را خودکار فعال میکند (قبلاً با خطای سخت خارج میشد) |
خروجی ترمینال | با فرمتبندی واضحتر، پیامهای خطای بهتر و معیارهای عملکرد بهبودیافته بازطراحی شده |
دایرکتوریهای خروجی dev و build | next dev و next build اکنون از دایرکتوریهای خروجی جداگانه استفاده میکنند، که اجرای همزمان را فعال میکند |
رفتار lockfile | مکانیسم lockfile اضافه شده تا چندین next dev یا ` |