Cloudflare تطلق Vinext 1.0 لتشغيل تطبيقات Next.js عبر Vite
أصبح Vinext 1.0 إطاراً جاهزاً للإنتاج يتيح نقل تطبيقات Next.js، سواء اعتمدت App Router أو Pages Router، لتعمل عبر Vite وعلى منصات مثل Cloudflare Workers وNetlify وAWS Lambda. ويركز الإصدار على توافق أوسع، واختبارات آلية مستمرة، وتسخين ذاكرة التخزين المؤقت قبل وصول المستخدمين إلى النسخة الجديدة.
أبرز النقاط
- Vinext 1.0 يتيح تشغيل تطبيقات Next.js على Vite ونشرها على Cloudflare Workers وNetlify وAWS Lambda.
- الإصدار يدعم App Router وPages Router والتطبيقات الهجينة، ما يفيد المشاريع الكبيرة التي لم تنتقل بالكامل إلى المسار الأحدث.
- تتجاوز اختبارات التوافق 99% لمعظم الميزات التي طلبها العملاء، مع آلاف الاختبارات وتشغيل يومي لاختبارات Next.js الشاملة.
- تسخين التخزين المؤقت يرسم الصفحات المطلوبة على شبكة Cloudflare قبل توجيه زيارات الإنتاج إلى النشر الجديد.
- دعم `use cache` وCache Components ما زال محدوداً في الإصدار الحالي.
تحوّل مشروع Vinext من تجربة اعتمدت على الذكاء الاصطناعي إلى إصدار 1.0 تقول Cloudflare إنه جاهز للاستخدام في بيئات الإنتاج. الفكرة الأساسية للمشروع هي تشغيل تطبيقات Next.js باستخدام Vite، مع إبقاء بنية مشروع Next.js كما هي قدر الإمكان، ثم إتاحة نشره على أكثر من منصة ويب.
يدعم Vinext 1.0 المسارين الرئيسيين في Next.js: App Router الأحدث وPages Router الذي ما زال مستخدماً في تطبيقات كبيرة يصعب نقلها دفعة واحدة. كما يدعم التطبيقات الهجينة التي تجمع بين المسارين، إلى جانب مكونات React التي تعمل على الخادم، وServer Actions، ومسارات API، والوسيط البرمجي middleware، والتنقل من جهة العميل.
هذا مهم لأن نقل تطبيق Next.js لا يعني مجرد توفير دوال تحمل الأسماء نفسها. يجب أن تتطابق النتيجة العملية أيضاً: كيف تُرسم الصفحة، وكيف تُخزّن في الذاكرة المؤقتة، وكيف تتغير الاستجابة في الطلبات اللاحقة. وتقول Cloudflare إن اختبارات التوافق لمعظم الميزات التي طلبها العملاء تتجاوز الآن 99%.
توافق ومراقبة عبر بيئات مختلفة
وسع الإصدار دعمه لدورة حياة الصفحة كاملة. أي أن الصفحة يمكن أن تُنشأ على الخادم عند الطلب، أو تُرسم مسبقاً أثناء البناء، أو تُصدّر كملفات ثابتة، أو تُخزّن باستخدام ISR، وهي آلية تسمح بتحديث الصفحات الثابتة تدريجياً بدلاً من إعادة بناء الموقع كاملاً.
يدعم Vinext أيضاً إعادة التحقق في الخلفية أو عند الطلب، وإبطال المحتوى المخزّن وفق المسار أو الوسم. ولمن يريد موقعاً ثابتاً بالكامل، يتوفر دعم output: "export".
في جانب المراقبة، يوفر الإطار تتبعاً متوافقاً مع Next.js عبر المسارين، ما يسمح باستمرار إعدادات OpenTelemetry وSentry الموجودة. وعند التشغيل على Cloudflare Workers، تتكامل السجلات التتبعية أيضاً مع أدوات المراقبة الأصلية في Workers.
تسخين التخزين المؤقت قبل النشر
من أبرز إضافات الإصدار ميزة تسخين ذاكرة التخزين المؤقت. عادةً قد تستغرق عملية البناء وقتاً طويلاً إذا كان الموقع يضم عشرات أو مئات آلاف الروابط الممكنة، حتى لو كانت غالبية تلك الصفحات لا تستقبل زيارات كثيرة.
بدلاً من رسم كل هذه الصفحات على جهاز البناء، ينقل Vinext هذه المهمة إلى شبكة Cloudflare قبل تفعيل النشر. تُرفع نسخة جديدة من Worker أولاً من دون توجيه أي نسبة من زيارات الإنتاج إليها، ثم تُطلب صفحات محددة من تلك النسخة لملء التخزين المؤقت. بعد اكتمال ذلك، يمكن ترقية النشر ليصل إلى المستخدمين مع استجابات سريعة من ذاكرة التخزين المؤقت.
يمكن للمطور تحديد الصفحات المراد تجهيزها باستخدام أدوات Next.js المعتادة مثل generateStaticParams() وgetStaticPaths()، كما يستطيع Vinext إضافة الصفحات مرتفعة الزيارات إلى القائمة.
اختبارات مستمرة لمواكبة Next.js
بنى الفريق آلاف الاختبارات التي تغطي السلوك الأساسي للإطار في كلا المسارين، وخادمي التطوير والإنتاج، ووجهات النشر في Node.js وCloudflare Workers. كما يشغّل يومياً اختبارات Next.js الشاملة ضد Vinext لاكتشاف أي اختلافات أو تراجعات مبكراً مع تغييرات Next.js المستمرة.
ولا يدعم Vinext كل ما أضافه Next.js حديثاً بالدرجة نفسها. فدعمه لتوجيه use cache المرتبط بـ Cache Components ما زال محدوداً، إذ ركز الفريق في هذه المرحلة على الميزات التي اعتبرتها الفرق المستخدمة أكثر أولوية.
للتجربة أو نقل مشروع قائم، يقترح المشروع الأمرين التاليين للتحقق من التوافق وإعداد Vite والنشر مع الحفاظ على هيكل مشروع Next.js:
npx vinext check
npx vinext init
أما لإنشاء تطبيق جديد فيمكن استخدام:
npm create vinext-app@latest my-app
ويمكن النشر على Cloudflare Workers مع تسخين التخزين المؤقت عبر:
npx @vinext/cloudflare deploy --warm-cache
لماذا يهم؟
يوفر Vinext مساراً عملياً للفرق التي تريد الاستفادة من سرعة Vite ومرونة النشر خارج بيئة Next.js التقليدية، من دون إعادة كتابة تطبيقاتها. كما أن تسخين التخزين المؤقت قد يقلل وقت تجهيز المواقع الكبيرة ويحسن جاهزية الصفحات المهمة عند إطلاق نسخة جديدة.