Node.js 25 در ۱۵ اکتبر ۲۰۲۵ روی خط Current آمد، نه بهعنوان هدف LTS فردای پروداکشن. جهت انتشار سالم بود: رفتار نزدیکتر به پیشفرض امن، API نزدیکتر به استاندارد وب، و کمی کمتر تکهتکه بودن کار بکاند مدرن. برای تیمی که اپ جدی تحویل میدهد این نوع انتشار ارزش توجه دارد. ارزش جهش ناوگان را خودش ثابت نمیکند.
اعلامیه را له نکن. فرض تازهای که برای کد میسازد مهم است. چه چیزی آسانتر شد، چه چیزی امنتر شد، و چه چیزی سخت ماند. نمودار بنچمارک را جای این سؤال ننشان.
چه چیزی در ۲۵.۰ واقعاً عوض شد
یادداشت انتشار، V8 را به 14.1 رساند و از بهبود JSON.stringify، تبدیل base64 و hex روی Uint8Array، و کار روی WebAssembly حرف زد. اینها کیفیت زندگی و سرعتاند. جهت امنیتی جای دیگری است. مدل مجوز پرچم --allow-net را گرفت. Web Storage از حالت آزمایشی بیرون آمد و بهصورت پیشفرض روشن شد. ErrorEvent سراسری شد. APIهای مدتها منسوخ، از جمله SlowBuffer، به پایان خط رسیدند. کش کامپایل قابل حمل و JSPI برای WebAssembly هم در همان نسل آمدند.
جمله «secure-by-default» را تحتاللفظی نخوان. --allow-net فقط وقتی شبکه را محدود میکند که پروسه را واقعاً زیر مدل مجوز راه انداخته باشی. پروسه معمولی هنوز باز است. پرچم را در اسکریپت استقرار نداری یعنی قابلیت را جشن گرفتهای و مسیر حمله را نه. این همان فرق اعلامیه با پیشفرض عملیاتی است.
Web Storage پیشفرض هم هدیه بیحاشیه نیست. localStorage و sessionStorage روی سرور، در تست، و در رندر سرور غافلگیر میکنند. کدی که فرض میکرد این نامها فقط در مرورگر هستند ممکن است ناگهان شیء ببیند، یا بسته به محیط به مسیر ذخیره نیاز داشته باشد. قبل از اینکه تیم «حالا مثل مرورگر است» را در کد پروداکشن فرض کند، یک تست روی همان نسخه بنویس. استاندارد وب وقتی روی سرور ظاهر میشود قرارداد تازه است، نه میانبر.
حذف SlowBuffer و پایان خط APIهای کهنه برای تیم امنیتی مهمتر از یک بهینهسازی JSON است، چون وابستگی قدیمی را مجبور به رو شدن میکند. اگر بیلد روی API مرده میشکند، این شکست مفید است. اگر کسی با پلیفیل خاموشش کند و فراموش کند، فقط بدهی را به نسخه بعد بردهای.
چرا برای تیم محصول مهم است
انتشاری از این جنس پلتفرم را به پیشفرض عاقلتر هل میدهد. وقتی رانتایم در امنیت و یکدستی کمک کند، تیم کمتر دور حالت لبه وصله میزند و بیشتر روی منطق کسبوکار و کیفیت عملیاتی میماند. به شرطی که واقعاً از مسیر تازه استفاده کند. قابلیت استفادهنشده معماری را عوض نمیکند.
در کار روزانه این یعنی کدام میانبر امنیتی را میتوانی برداری، کدام کتابخانه را فقط چون API کوچک وب را شبیهسازی میکرد نگه داشته بودی، و فاصله توسعه محلی با پروداکشن چقدر کمتر شده. اگر Node مسیر پیشفرض بهتری میدهد، از آن استفاده کن. لایه سفارشی کمتر، ابزار وابسته کمتر برای رفتار ساده، و شکاف کمتر بین لپتاپ و سرور معمولاً برد خالص است. مقاومسازی دور رانتایم را با انتزاع تازه عوض نکن.
نسخه فرد Current است. تیم روی LTS نباید فردای انتشار، پروداکشن را به ۲۵ ببرد چون پرچم قشنگ شده. همان عادت را در نسخه پشتیبانیشدهای که واقعاً اجرا میکنی پیاده کن: مدل مجوز را در یک سرویس کمخطر امتحان کن، تست را برای جهانیهای تازه وب بهروز کن، و حذف API منسوخ را در شاخه جدا بشکن. اگر هیچکدام را روی نسخهای که الان در پروداکشن است شروع نکنی، ۲۵ فقط مطلب خواندنی است.
اشتباه توجه انتخابی
تیمها انتشار رانتایم را جشن میگیرند و مدیریت راز سهلانگار، بررسی مرز ضعیف، و خط لوله استقرار نامنضبط را همانطور نگه میدارند. بهبود پلتفرم وقتی بیشتر کمک میکند که کد بالای آن را ساده کنی. اگر گردش کار مبهم است یا کسی نمیداند پروسه با چه پرچمی بالا میآید، نسخه تازه راه سریعتری برای ادامه آشفتگی است.
اعتماد کاربر از تکههای کسل ساخته میشود: خطا، تأخیر، تلاش دوباره، لاگ، و دست دادن به کد عادی. برای این انتشار، معادلش این است که بدانی پروسه پروداکشن مدل مجوز را روشن کرده یا نه، و اگر نه، چرا. «در مستندات هست» جواب حادثه نیست.
یک سرویس را انتخاب کن، نه بازنویسی کل پلتفرم. اگر --allow-net را روشن میکنی، فهرست میزبان را کوچک و قابل بازبینی نگه دار. اگر Web Storage را در کد سرور دیدی، عمداً تصمیم بگیر مال پیکربندی است یا نشت عادت فرانت. فرض عوضشده را بنویس. بلوغ بکاند سرعت تنها نیست. اعتماد، یکدستی، و مقدار کار کسلی است که پلتفرم برایت درست انجام میدهد، به شرطی که تو روشناش کرده باشی.
Node ۲۵ یادآوری است، نه مقصد. اگر تنها اثرش در ریپو یک شماره در Dockerfile باشد و پرچم مجوز و تست جهانیهای وب دست نخورده بمانند، انتشار را مصرف نکردهای. فقط برچسب را عوض کردهای.
پیشفرض تازه را در کد بالا ساده کن
اگر تا دیروز برای کار کوچک وب یک وابستگی میکشیدی، ببین همان کار را API خود Node در این خط پوشش میدهد یا نه. این دلیل کافی برای ارتقای پروداکشن نیست. دلیل کافی است که در کد تازه، روی نسخهای که واقعاً اجرا میکنی، لایه اضافه نسازی. هر وابستگی که فقط یک تابع استاندارد را شبیهسازی میکند، سطح نگهداری و سطح وصله امنیتی است.
مدل مجوز را روی سرویسی امتحان کن که شبکه محدود و قابل فهرست دارد. یک کارگر پسزمینه که فقط به پایگاه و یک API داخلی حرف میزند، کاندید بهتری است از دروازه عمومی که به دهها میزبان وصل است. --allow-net را با فهرست کوتاه شروع کن و شکست اتصال را لاگ قابل فهم کن. اگر اولین اثر پرچم این باشد که سلامت سرویس بیدلیل قرمز شود و کسی پرچم را بردارد، درس امنیتی را سوزاندهای.
برای Web Storage، جستجو در کد سرور را جزو کار انتشار بدان. اگر اسم localStorage در مسیر رندر یا در تست ظاهر شد، تصمیم بگیر عمدی است یا تصادف پیشفرض تازه. تصادف را با گارد محیطی ببند، نه با فرض اینکه «روی لپتاپ کار کرد». ErrorEvent سراسری هم میتواند کدی را که وجود این نام را نشانه مرورگر میدانست گیج کند. اینها باگهای هیجانانگیز نیستند. همان نوع شکستگیاند که تیم امنیتی باید قبل از کاربر ببیند.
در نهایت انتشار را با خط لوله بسنج، نه با شماره. راز هنوز در تصویر کانتینر است یا نه. مرز سرویس هنوز با شبکه باز بالا میآید یا نه. تست هنوز روی API مرده پلیفیل دارد یا نه. اگر جوابها بدند، Node ۲۵ کمکی نکرده. فقط یادآوری کرده که بلوغ بکاند کار کسل بالای رانتایم است، و آن کار را هیچ شماره نسخهای بهجایت انجام نمیدهد.