بررسی تغییرات نسخه Node.js 24

نسخه 24 از Node.js در تاریخ 6 مه 2025 به‌صورت رسمی منتشر شد؛ نسخه‌ای که تمرکز آن بر نوآوری و پایداری بلندمدت است. طبق برنامه، این نسخه در اکتبر 2025 وارد فاز پشتیبانی بلند مدت (LTS) می‌شود و از همین رو، نسخه‌ای کلیدی برای استفاده در محیط‌های تولیدی به‌شمار می‌رود.

در این مقاله، چرخه انتشار Node.js را بررسی می‌کنیم، مهم‌ترین ویژگی‌های جدید آن را مرور کرده و گام‌هایی که باید برای سازگاری پروژه‌های فعلی خود با این نسخه برداریم را شرح خواهیم داد.

استراتژی انتشار نسخه جدید Node.js: تعادلی میان پایداری و نوآوری

Node.js از یک مدل نسخه‌بندی دو‌ مسیره استفاده می‌کند. نسخه‌های زوج مانند 20.x و 22.x برای دریافت پشتیبانی بلندمدت (LTS) طراحی شده‌اند و تا 30 ماه پشتیبانی می‌شوند. این نسخه‌ها معمولاً انتخابی امن برای تیم‌ها و پروژه‌های تولیدی هستند. در مقابل، نسخه‌های فرد مثل 21.x و 23.x کوتاه مدت‌اند و بیشتر برای تست ویژگی‌های جدید مناسب می‌باشند، اما برای استفاده در محیط‌های واقعی توصیه نمی‌شوند.

چرخه انتشار Node.js شامل سه مرحله است:

  • Current (فعلی)

  • Active LTS (پشتیبانی فعال)

  • Maintenance LTS (نگه‌داری امنیتی)

بر اساس برنامه انتشار در مه 2025:

  • Node.js 23 در مرحله‌ی Current قرار دارد. این نسخه جدیدترین قابلیت‌های جاوااسکریپت و موتور V8 را ارائه می‌دهد، اما تنها 6 ماه پشتیبانی دارد و ممکن است شامل تغییرات ناسازگار باشد. بنابراین برای محیط تولید مناسب نیست.

  • Node.js 22.x وارد فاز Active LTS شده، پایدار است و وصله‌های امنیتی دریافت می‌کند. انتخابی مناسب برای پروژه‌های بلند مدت است.

  • Node.js 20.x به مرحله Maintenance وارد شده و تنها وصله‌های امنیتی دریافت می‌کند. اگر هنوز از این نسخه استفاده می‌کنیم، بهتر است آن را ارتقا دهیم.

اگرچه این مدل در ابتدا کمی پیچیده به نظر می‌رسد، اما هدف آن تأمین پایداری برای کسب‌وکارها و فضای امن برای آزمایش نوآوری‌ها است. اکنون که نسخه 24 منتشر شده و به‌زودی وارد LTS می‌شود، زمان خوبی است تا قابلیت‌های جدید آن را بررسی و پروژه‌های خود را برای آینده آماده کنیم.

مروری بر ویژگی‌های جدید نسخه Node.js 24

نسخه Node.js 24 یک نسخه اصلی محسوب می‌شود که شامل مجموعه‌ای از ویژگی‌های جدید است؛ از جمله ارتقای موتور V8 به نسخه 13.6 . در ادامه، این تغییرات را در پنج دسته زیر بررسی می‌کنیم تا بتوانیم بر اساس اولویت‌های پروژه خود تصمیم‌گیری بهتری داشته باشیم:

  • ارتقای موتور V8
  • بهینه‌سازی عملکرد
  • ارتقای امنیت
  • بهبود تجربه توسعه‌دهنده
  • پایداری بیشتر

ارتقای موتور V8 در Node.js 24 به نسخه 13.6

یکی از مهم‌ترین تغییرات Node.js 24، ارتقای موتور پرقدرت V8 به نسخه 13.6 است. این موتور توسط Google توسعه داده شده و مسئول اجرای کدهای جاوااسکریپت در Node.js است.

قابلیت‌های جدید این نسخه عبارت‌اند از:

  • آرایه‌های تایپ شده پیشرفته: اضافه شدن Float16Array امکان ذخیره‌سازی و پردازش بهینه‌ اعداد اعشاری 16 بیتی را فراهم می‌کند؛ این قابلیت برای کاربردهایی نظیر یادگیری ماشین، پردازش گرافیکی و محاسبات حساس به حافظه بسیار مفید است.
  • مدیریت منابع صریح: پشتیبانی از using و await using مدیریت منابعی مانند فایل‌ها و حافظه را ساده‌تر و امن‌تر می‌کند و احتمال memory leak را کاهش می‌دهد.
  • بهبود عبارات منظم: متد RegExp.escape ساخت الگوهای RegExp را، به‌ویژه هنگام استفاده از ورودی‌های داینامیک آسان‌تر و ایمن‌تر می‌کند.
  • پیشرفت WebAssembly: پشتیبانی از WebAssembly Memory64 امکان آدرس‌دهی 64 بیتی را فراهم کرده و اجرای برنامه‌های بزرگ‌تر را ممکن می‌سازد.
  • تشخیص خطا استاندارد: متد Error.isError بررسی نوع خطاها را ساده‌تر کرده و کاربردی در برنامه‌هایی با کانتکست‌های اجرایی مختلف دارد.

این قابلیت‌ها Node.js را به ECMAScript نزدیک‌تر کرده و باعث بهبود عملکرد، امنیت و تجربه توسعه می‌شوند.

بهبود عملکرد در نسخه جدید با تمرکز بر Undici و AsyncLocalStorage

ارتقای Undici به نسخه 7.0

در نسخه Node.js 24، کلاینت HTTP داخلی یعنی Undici به نسخه 7.0 ارتقا یافته است. این ابزار توسط تیم Node.js طراحی شده و بدون تغییر در API فعلی، عملکرد لایه HTTP را بهینه می‌کند.

بهبودهای کلیدی شامل:

  • ارتقای connection pooling
  • پشتیبانی بهتر از HTTP/2
  • افزایش سرعت درخواست‌ها تا 30٪ طبق بنچمارک‌ها
  • بهبود عملکرد WebSocket
  • مکانیزم‌های retry پایدارتر
  • توازن بار هوشمند میان اتصالات

Undici 7.0 اکنون ابزار قدرتمندتری برای ارتباطات HTTP در برنامه‌های Node.js است.

افزایش عملکرد AsyncLocalStorage با استفاده از AsyncContextFrame

Node.js 24 به‌طور پیش‌فرض از پیاده‌سازی جدیدی به نام AsyncLocalStorage برای AsyncContextFrame استفاده می‌کند. این تغییر عملکرد را بهبود داده و در عین حال API فعلی را بدون تغییر نگه داشته است.

این ارتقا به‌ویژه برای پروژه‌هایی که نیاز به ردیابی توزیع‌شده، لاگ‌گیری یا مدیریت context در درخواست‌ها دارند، بسیار ارزشمند است.

قابلیت‌های امنیتی جدید در نسخه Node.js 24

پایدار شدن سیستم Permission Model

در نسخه Node.js 24، مدل Permission از حالت آزمایشی خارج شده و اکنون یک قابلیت رسمی و پایدار برای استفاده در محیط‌های تولیدی است. flag --experimental-permission به --permission تغییر یافته که نشانه‌ای واضح از بلوغ این قابلیت امنیتی است.

مدل Permission در Node.js، پاسخی به چالش‌های امنیتی مدرن است که امکان محدود کردن دسترسی به فایل سیستم، شبکه و متغیرهای محیطی را فراهم می‌کند.

// Run your Node.js application with permissions enabled
$ node --permission --allow-fs-read=/allowed/path app.js

برای مثال، پس از اجرای دستور بالا، برنامه تنها اجازه خواندن از مسیر /allowed/path را خواهد داشت و تمامی دسترسی‌های دیگر به فایل سیستم به‌طور پیش‌فرض مسدود می‌شوند.

این تغییر مهم، نقطه عطفی در روند ارتقا امنیت در Node.js محسوب می‌شود.

افزایش ایمنی در مدیریت آرگومان‌های child_process

در Node.js 24، دیگر مجاز به ارسال آرگومان‌ها به صورت رشته‌ای به child_process.spawn() و execFile() نیستیم. در عوض، آرگومان‌ها باید به صورت آرایه‌ای و صریح ارسال شوند.

این تغییر به کاهش خطرات Shell Injection کمک کرده و اجرای فرآیندها را یکپارچه‌تر می‌کند.

معرفی npm نسخه ۱۱

نسخه Node.js 24 با npm 11 منتشر شده و امکانات جدیدی را در اختیار توسعه‌دهندگان قرار می‌دهد. این نسخه شامل بهبودهایی در زمینه‌ی عملکرد و امنیت است.

مهم‌ترین تغییرات شامل موارد زیر است:

  • نصب سریع‌تر و عملکرد بهتر در مدیریت پکیج‌ها
  • بررسی امنیتی پیشرفته‌تر: در صورت شکست درخواست‌های دسته‌جمعی، دیگر به endpointهای قدیمی fallback نمی‌شود؛ این موضوع گزارش‌دهی امنیتی را یکپارچه‌تر می‌سازد
  • سخت‌گیری در اجرای اسکریپت‌ها: اکنون flag -- ignore-scripts بر تمام اسکریپت‌های lifecycle اعمال می‌شود و از اجرای کدهای احتمالی ناامن جلوگیری می‌کند
  • پشتیبانی از نسخه‌های Node برابر با ^20.17.0 || >=22.9.0 برای هم‌راستایی بهتر با نسخه‌های LTS جدید Node.js

بهبود تجربه توسعه‌دهنده

اضافه‌شدن URLPattern به فضای سراسری

نسخه Node.js 24 قابلیت جدیدی برای توسعه‌دهندگان وب ارائه داده است: آبجکت URLPattern اکنون به‌صورت سراسری در دسترس است؛ درست مانند URL. به این ترتیب دیگر نیازی به import کردن آن در فایل‌های مسیریابی نیست.

URLPattern مانند یک عبارت منظم برای آدرس‌های URL است، اما با سینتکسی ساده‌تر و خواناتر که نگه‌داری و استفاده از آن را بسیار آسان می‌سازد.

// No need to import anything!
const userRoute = new URLPattern({ pathname: '/users/:id' });

// Test a URL
const match = userRoute.exec('https://example.com/users/42');
console.log(match.pathname.groups.id); // Outputs: "42"

این ویژگی برای اعتبارسنجی مسیرهای API بسیار کاربردی است و به توسعه‌دهندگان امکان می‌دهد سیستم‌های مسیریابی سفارشی ساده ایجاد کنند؛ بدون این که نیاز باشد از کتابخانه‌های بزرگ استفاده کنند. همچنین در ساخت web scraperهایی که با URLهای ساخت‌یافته کار می‌کنند نیز بسیار مفید است.

تغییرات جدید در Test Runner داخلی Node.js

نسخه 24 سیستم تست داخلی Node.js را به‌روزرسانی کرده و اجرای خودکار کامل تمام subtestها را ممکن ساخته است.

// before Node.js v24
test('API test suite', async (t) => {
  const api = await setupTestAPI();
  // Had to remember to await each subtest
  await t.test('GET /users', async () => {
    const response = await api.get('/users');
    deepStrictEqual(response.status, 200);
  });
});

// after Node.js v24
test('API test suite', async (t) => {
  const api = await setupTestAPI();
  // No awaits needed - runner handles it automatically
  t.test('GET /users', async () => {
    const response = await api.get('/users');
    deepStrictEqual(response.status, 200);
  });
});

این ویژگی رفتار test runner را طبیعی‌تر کرده و تجربه تست‌نویسی را روان‌تر و قابل‌اعتمادتر می‌سازد.

تغییرات پایداری و حذف APIهای قدیمی در نسخه جدید

حذف و منسوخ شدن برخی APIهای قدیمی

در Node.js 24، تعدادی از APIهای قدیمی منسوخ یا به‌طور کامل حذف شده‌اند.

پایان کار متد url.parse و انتقال به WHATWG URL API

متد url.parse() اکنون منسوخ شده است. توصیه می‌شود به‌جای آن از WHATWG URL API استفاده کنیم که سازگارتر با استانداردها و امن‌تر است.

// Deprecated (throws runtime warning)
const parsed = require('url').parse('https://example.com');// alternative
const parsed = new URL('https://example.com');

حذف کامل tls.createSecurePair برای ارتقا امنیت TLS

متد قدیمی tls.createSecurePair به‌طور کامل حذف شده است.

// Removed (no longer available)
require('tls').createSecurePair();

// Use TLSSocket instead
new tls.TLSSocket(socket, options);

منسوخ شدن SlowBuffer

آبجکت SlowBuffer اکنون رسماً منسوخ شده است. استفاده از آن هشدار زمان اجرا ایجاد می‌کند.

// Deprecated (use Buffer.allocUnsafeSlow)
const slow = new SlowBuffer(10);

// Modern alternative
const slow = Buffer.allocUnsafeSlow(10);

ضرورت استفاده از new در کلاس‌های REPL و Zlib

از این پس، ایجاد نمونه‌هایی از کلاس‌های REPL یا استفاده از کلاس‌های Zlib بدون استفاده از کلمه کلیدی new، به‌عنوان رفتاری منسوخ در زمان اجرا شناسایی می‌شود. تیم توسعه‌دهنده این تغییر را برای هماهنگی بیشتر با استانداردهای ساخت کلاس در جاوااسکریپت اعمال کرده است.

بررسی روش ارتقا به نسخه Node.js 24

اگر قصد ارتقا به نسخه 24 را داریم، باید این نکته را به‌خاطر داشته باشیم که برخی APIها و الگوهای برنامه‌نویسی منسوخ شده‌اند. این تغییرات ممکن است نیاز به بازبینی و به‌روزرسانی کدهای قدیمی داشته باشند، به‌ویژه اگر پروژه‌ ما شامل موارد زیر باشد:

  • استفاده از کلاس‌های REPL یا Zlib بدون new
  • ارسال آرگومان‌ها به child_process به‌صورت رشته‌ای

برای شناسایی و رفع این موارد، توصیه می‌شود:

برای ارتقا به این نسخه، می‌توانیم از version managerای مانند nvm استفاده کنیم. نصب آن بسیار ساده است:

nvm install 24
nvm use 24

یا اینکه نسخه جدید را مستقیماً از وب‌سایت رسمی Node.js دانلود و نصب نماییم.

با توجه به اینکه Node.js 24 در اکتبر 2025 وارد مرحله LTS خواهد شد، اکنون زمان مناسبی برای بررسی ویژگی‌های جدید آن است. چه در حال نگه‌داری پروژه‌های فعلی Node باشیم و چه قصد شروع پروژه‌های جدید را داشته باشیم، استفاده زودهنگام از این نسخه به ایمن‌تر و پایدارتر بودن پشته تکنولوژی ما کمک می‌کند.

جمع‌بندی

Node.js 24 نشان‌دهنده گامی بزرگ در جهت توسعه‌ی پایدار و مدرن است. این نسخه با تمرکز بر بهبود عملکرد، امنیت و تجربه برنامه‌نویسی، فرصت مناسبی برای ارتقا پروژه‌ها فراهم کرده است.

اگر در حال توسعه یا نگه‌داری اپلیکیشن‌های Node هستیم، اکنون بهترین زمان برای ارزیابی، تست و آماده‌سازی برای نسخه LTS آینده است.

دیدگاه‌ها:

افزودن دیدگاه جدید