طوال سنوات، عمل Vite على حلٍّ وسط هادئ. ففي بيئة التطوير كان يستخدم esbuild لتحويلات فائقة السرعة، وفي الإنتاج ينتقل إلى Rollup للاستفادة من نظام إضافاته الناضج ومخرجاته الأفضل. مُجمّعان، سلوكان مختلفان، وسلسلة طويلة من الفروقات الدقيقة بين ما تراه محليًّا وما يُنشَر فعليًّا. يضع Vite 8 حدًّا لهذا الانقسام، إذ يستبدل المحرّكين معًا بمُجمّع واحد مكتوب بلغة Rust اسمه Rolldown، والنتائج يصعب تجاهلها: عمليات بناء كانت تستغرق دقائق صارت تنتهي في ثوانٍ.
يشرح هذا الدليل ما هو Rolldown، ولماذا يهمّك، وكيف تُرحّل مشروعًا حقيقيًّا دون كسر إضافاتك.
ما الذي تغيّر في Vite 8
صدر Vite 8 بإصدار مستقر في 12 مارس 2026، وبلغ Rolldown نسخته 1.0 المستقرة في 7 مايو 2026. العنوان الأبرز معماري: مُجمّع واحد يشغّل الآن بيئتي التطوير والبناء معًا. كُتب Rolldown بلغة Rust، ويعتمد على سلسلة أدوات Oxc للتحليل والتصغير، ويوفّر واجهة إضافات متوافقة مع Rollup حتى يستمر نظامك الحالي في العمل.
أرقام الأداء مأخوذة من عمليات ترحيل حقيقية لا من اختبارات صناعية:
- Linear: انخفض بناء الإنتاج من 46 ثانية إلى 6 ثوانٍ — أي بنسبة 87٪.
- GitLab: انتقل من دقيقتين ونصف على Vite 7 إلى 22 ثانية، وأسرع بـ43 مرّة من إعداد Webpack الأصلي.
- Ramp: أسرع بنسبة 57٪. Beehiiv: أسرع بنسبة 64٪. Mercedes-Benz.io: حتى 38٪.
يُوصف Rolldown عمومًا بأنه أسرع من Rollup بمقدار 10 إلى 30 ضعفًا، وتتّسع الفجوة كلّما كبر مشروعك. وفي المستودعات الكبيرة، هذا هو الفارق بين استراحة قهوة ونظرة خاطفة بعيدًا عن المحرّر.
لماذا يهمّ وجود مُجمّع Rust واحد
كان للنموذج ذي المُجمّعين مشكلة بنيوية: قد تختلف بيئة التطوير عن الإنتاج. فوحدة تُشذَّب أشجارها جيّدًا في Rollup قد تتصرّف بطريقة مختلفة تحت تحويل esbuild في التطوير، ولا تكتشف ذلك إلا بعد النشر. التوحيد على Rolldown يعني أنّ ما تشغّله محليًّا هو ما تنشره.
لغة Rust هي العامل الممكّن هنا. فالتجميع عمل مُكثّف للمعالج — تحليل، وحلّ للاعتماديات، وتحويل، وتسلسل لآلاف الوحدات. والشيفرة الأصلية مع تعدّد المسارات الحقيقي تنجز ذلك أسرع ممّا تستطيع JavaScript، ولهذا تهاجر سلسلة أدوات الواجهة الأمامية بأكملها نحو Rust وGo. ويُعدّ Rolldown جزءًا من حزمة VoidZero الأوسع إلى جانب مدقّق Oxc (oxlint)، ومنسّق Oxc، وأداة tsdown لبناء المكتبات.
ترحيل مشروع قائم
صُمّم الترحيل ليكون مملًّا، وهذا أرفع مديح يمكن أن تناله أداة بناء. ابدأ بالترقية:
npm install vite@^8 --save-devيحوّل Vite 8 تلقائيًّا إعدادات esbuild وrollupOptions الحالية إلى مكافئاتها في Rolldown وOxc، لذا تُبنى معظم المشاريع من المحاولة الأولى. ويبدو الإعداد المبسّط مطابقًا لما لديك:
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
build: {
target: 'es2022',
},
})وحيث كنت تستخدم سابقًا build.rollupOptions، أصبح لديك الآن build.rolldownOptions بالبنية نفسها. وتنتقل خيارات المُدخل والمُخرَج مباشرةً:
export default defineConfig({
build: {
rolldownOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
},
},
},
},
})تعمل معظم إضافات Rollup دون تغيير بفضل واجهة الإضافات المتوافقة. ولم يتغيّر الحدّ الأدنى من Node عن Vite 7 — أي Node 20.19+ أو 22.12+ — لذا الأرجح ألّا تحتاج صور CI إلى أي تعديل.
تقسيم متقدّم يتوسّع فعلًا
من أبرز مكاسب Rolldown العملية نموذجه في التقسيم. فإلى جانب manualChunks المألوف، يدعم قواعد تقسيم على طراز webpack عبر advancedChunks، ما يتيح التقسيم حسب الحجم أو عدد الوحدات أو أنماط المسارات. وقد استخدمت Framer ذلك لخفض عدد القطع لديها بنسبة 67٪.
export default defineConfig({
build: {
rolldownOptions: {
output: {
advancedChunks: {
groups: [
{
name: 'vendor',
test: /node_modules/,
minSize: 50_000,
},
{
name: 'ui',
test: /src\/components\/ui/,
},
],
},
},
},
},
})لهذا أثرٌ على أداء التحميل الواقعي. فعدد أقل من القطع الأذكى يعني عددًا أقل من الرحلات الشبكية — وهو مكسب ملموس عندما يكون مستخدموك على شبكات الهاتف بعيدًا عن حافتك، وهو واقع يوميّ في منطقة الشرق الأوسط وشمال إفريقيا حيث لا تكون الرحلة إلى عقدة حافة في فرانكفورت أو البحرين مجّانية أبدًا.
استخدام Rolldown بشكل مستقل
لست بحاجة إلى Vite للاستفادة من Rolldown. فهو يُشحَن كمُجمّع مستقلّ مع واجهة سطر أوامر ودعمٍ لإعداد TypeScript، ما يجعله خيارًا قويًّا لتجميع المكتبات أو شيفرة الخادم أو أدوات سطر الأوامر.
npm install rolldown --save-dev// rolldown.config.ts
import { defineConfig } from 'rolldown'
export default defineConfig({
input: 'src/index.ts',
output: {
dir: 'dist',
format: 'esm',
},
})npx rolldown -c rolldown.config.tsيقوم Rolldown بحذفٍ صارم للشيفرة الميتة، محترمًا تعليقات @__PURE__ و@__NO_SIDE_EFFECTS__ إضافةً إلى حقل sideEffects في package.json. ويُضمّن تعدادات const وثوابت TypeScript، ويأتي بإضافات مدمجة (مثل replacePlugin) تحلّ محلّ اعتماديات كنت تجلبها منفصلةً. ولمؤلّفي المكتبات، تغلّف أداة tsdown مُجمّع Rolldown بإعدادات افتراضية معقولة لتوليد الأنواع وصيغ مخرجات متعدّدة.
وضع التطوير التجريبي بالتجميع الكامل
كان خادم التطوير في Vite يخدم تقليديًّا وحدات ES أصلية غير مُجمّعة، وهو ما يبدأ بسرعة لكنه قد يُغرق المتصفّح بالطلبات في التطبيقات الكبيرة. يضيف Vite 8 وضع تطوير تجريبيًّا بالتجميع الكامل يُجمّع في بيئة التطوير أيضًا. وتُظهر النتائج المبكّرة بدء خادم تطوير أسرع بنحو 3 أضعاف، وإعادة تحميل كاملة أسرع بنسبة 40٪، وعدد طلبات شبكية أقلّ بـ10 أضعاف. وهو اختياري حاليًّا، لكنه يشير إلى وجهة الإعداد الافتراضي مستقبلًا.
ملاحظة حول هدفٍ متحرّك
لا تزال المنظومة تستقرّ. ففي أواخر يونيو 2026، سحب الفريق تكاملًا تجريبيًّا لمُجمّع React Compiler المكتوب بلغة Rust من Rolldown بعدما أضاف نحو 5 ميغابايت إلى الملف الثنائي وأثار أسئلة وجيهة حول شحن شيفرة خاصّة بإطار عملٍ داخل مُجمّع عامّ الغرض. الدرس للفِرق: ثبّت إصداراتك، واقرأ سجلّ التغييرات قبل الترقية، وأبقِ التحويلات الخاصّة بإطار العمل داخل إضافات إطار العمل حيث تنتمي.
وهناك أيضًا مفاضلة في الحجم ينبغي حسابها. إذ يُثبَّت Vite 8 بحجم أكبر بنحو 15 ميغابايت من Vite 7، معظمها من Lightning CSS (نحو 10 ميغابايت) وRolldown (نحو 5 ميغابايت). على جهاز المطوّر هذا غير ذي بال، أمّا في صورة حاوية مقيّدة بشدّة فمن المفيد معرفته.
هل ينبغي أن تُرقّي؟
لمعظم المشاريع، نعم. فمسار الترحيل سلسٌ بحقّ، ونظام الإضافات ينتقل كما هو، ووفورات زمن البناء كبيرة بما يكفي لتغيير طريقة عمل فريقك — تكامل مستمرّ أسرع، وعمليات بناء محلّية أسرع، ومفاجآت أقلّ من نوع «يعمل على جهازي» الناتجة عن انقسام المُجمّعين القديم. والخطوة العملية هي ترقية مشروع غير حرج أوّلًا، ومراقبة أرقام CI لديك، ثم نشرها عبر شيفرتك كاملةً.
عصر الانتظار على المُجمّع ينتهي. يجعل Vite 8 وRolldown خطوة البناء سريعة بما يكفي لتتوقّف عن كونها شيئًا تخطّط يومك حوله — وهذا بالضبط ما ينبغي أن تكونه أداة البناء.