فاضل 8 أيام على 30 أبريل 2026. Node.js 20 هيخلص دعم رسميًا يوم الخميس الجاي. اللي بعدها مفيش security patches ولا bug fixes ولا حتى دعم runtime من AWS Lambda. هنا بالظبط خطة ترحيل شغّالة في الوقت ده لـ Node.js 22 LTS بدون downtime.
Node.js 20 EOL: المهلة الحقيقية وأول قرار لازم تاخده
المشكلة باختصار
Node.js 20 دخل Active LTS في أكتوبر 2023 وكان مفترض يفضل مدعوم لحد أبريل 2026. الميعاد وصل. بعد يوم 30 أبريل: أي CVE جديدة في V8 أو OpenSSL مش هتتسد في 20. AWS Lambda بتوقف تحديثات الأمن على الـ runtime بتاع nodejs20.x. GitHub Actions بدأت deprecation من سبتمبر 2025، وبعد نهاية الشهر الـ actions اللي بتعتمد على Node 20 هتبدأ تتعطّل تدريجيًا.
ليه ده مش مجرد نسخة بتعدّي
فيه كذا تفصيلة مخفية بتخلّي ترحيل 20 إلى 22 مش drop-in زي اللي كتير فاكرين. ركّز على الثلاثة دول بالتحديد:
- OpenSSL 3.5 بيرفض أي مفتاح RSA/DSA/DH أقل من 2048-bit افتراضيًا. لو عندك certs قديمة أو private keys بتتحمّل من vault بطول 1024-bit، الخدمة هترمي
ERR_SSL_EE_KEY_TOO_SMALLمن أول دقيقة بعد الترقية. - مكتبة punycode اتشالت من الـ core. أي كود قديم بيعمل
require('punycode')هيرجعMODULE_NOT_FOUND. الحل: ثبّتpunycodeمن npm كـ dependency خارجية. - V8 13.x بيفعّل
Float16ArrayوRegExp.escape()افتراضيًا. مش هتكسر حاجة، لكن لو عندك polyfills قديمة بتشيك على وجود التوابع، هتلاقي branches ميّتة في الكود بتاعك.
مثال بسيط للمبتدئ
تخيّل عندك خدمة Node 20 بتعمل HTTPS request لسيرفر داخلي شغّال self-signed cert من 2019. التاريخ ده معناه غالبًا المفتاح 1024-bit. بعد الترقية لـ 22 هيحصل الآتي فورًا:
node:internal/tls:443
throw new Error('unable to verify the first certificate');
^
Error [ERR_SSL_EE_KEY_TOO_SMALL]: EE key too small
at TLSSocket.onConnectSecure (node:_tls_wrap:1670:34)
الحل مش NODE_TLS_REJECT_UNAUTHORIZED=0، ده بيطفي الـ TLS كله ويفتح الباب لـ MITM. الحل الصحيح: ولّد cert جديد 2048-bit أو أعلى، أو ارفع security level للخدمة المقابلة. ولو مجبور على توافق مؤقت، استخدم --tls-min-v1.2 --security-revert=CVE-XXXX ليوم واحد فقط لحد ما تعدّل الـ cert.
المفهوم علميًا
الـ LTS (Long-Term Support) في Node.js بيعني نسخة بتدخل Active Maintenance لمدة 18 شهر، بعدها تدخل Maintenance بس لمدة 12 شهر تاني، وبعدها EOL. الدورة كلها 30 شهر من أول Active LTS release. الأرقام الزوجية بس (18, 20, 22, 24) هي اللي بتدخل LTS. الفردية (21, 23, 25) عمرها 6 شهور بس وبتتقطع. EOL مش تحذير، ده انقطاع فعلي لـ security backports من مشروع Node.js نفسه.