تنتهي خط أنابيب CI من بناء Next.js وتدفع إلى Vercel. بعد أربع دقائق، ينشر المعاينة الخاصة بك. قبلت هذا الإيقاع لأن Webpack كان بطيئاً دائماً على النطاق الواسع — حتى أصبح Turbopack المجمع الافتراضي في Next.js 16. هاجرنا ثلاث تطبيقات عميل من Next.js 15 في مارس 2025، سعياً وراء أوقات البناء دون دقيقة التي وعدت بها ملاحظات الإصدار. كسرت نشريتان على الفور. توقف أحد تكاملات Sentry عن الإبلاغ. لم يكن لدى مكون Webpack مخصص اعتمدنا عليه لمدة سنتين مكافئ Turbopack. لكن التطبيقات التي نجت؟ انخفضت أوقات البناء من 3 دقيقة 52 ثانية إلى 51 ثانية، وتقلصت حزمة واحدة بشكل خاص بنسبة 18%. إليك كل تغيير كسر وثقناه، وفروق الأداء التي قسناها، وتسلسل الترحيل الذي سمح لنا بالشحن بدون تراجع.

هذا ليس إعادة صياغة لملاحظات الإصدار. هذا ما حدث فعلاً عندما قمنا بتشغيل next build باستخدام Turbopack على codebases حقيقية مع تعقيد حقيقي.

جدول المحتويات

Next.js 16 Turbopack Production Builds: What Changed and How We Migrated

لماذا Next.js 16 مهم جداً

Next.js 16 ليس مجرد قفزة في الإصدار. يمثل التغيير الأكثر أهمية في البنية التحتية للبناء منذ انتقال الإطار من الصفحات إلى App Router. ميزة العنوان الرئيسية واضحة: Turbopack يحل محل webpack كمجمع افتراضي لبناء التطوير والإنتاج.

لكن هناك المزيد. يأتي Next.js 16 أيضاً مع:

  • React 19 كحد أدنى مدعوم — لا مزيد من التوافق مع React 18
  • تحسن النقل والتصيير الجزئي المسبق وعي متقدم
  • معايير تخزين مؤقت جديدة معقولة فعلاً (تعلموا من ردود فعل تخزين مؤقت Next.js 15)
  • واجهات برمجية طلب غير متزامنة مفروضة بالكاملcookies() و headers() و params كلها غير متزامنة الآن بدون دعم متزامن موروث
  • Node.js 20 كمتطلب بحد أدنى — دعم Node 18 قد انتهى

بالنسبة للوكالات مثلنا التي تقوم بـ تطوير Next.js، هذا هو نوع الإصدار الذي يلامس كل شيء. لا يمكنك ببساطة رفع رقم الإصدار والانتهاء من الأمر.

ما الذي تغير فعلاً مع Turbopack في الإنتاج

دعنا نكون محددين. خلال Next.js 14 و 15، كان Turbopack متاحاً لـ next dev مع العلم --turbo. كانت بناءات الإنتاج لا تزال تستخدم webpack. قدمت Next.js 15.3 العلم التجريبي --turbopack لـ next build، وبحلول وقت شحن الإصدار 16، أصبح الافتراضي.

إليك ما هو مختلف بشكل أساسي حول كيفية معالجة Turbopack لبناءات الإنتاج مقارنة بـ webpack:

معمارية الترجمة الإضافية

يعالج Webpack الرسم البياني للاعتماديات بالكامل في كل بناء. يستخدم Turbopack نظام تخزين مؤقت على مستوى الدالة مدمج على محرك Turbo (مكتوب بـ Rust). في الواقع العملي، هذا يعني أن البناءات اللاحقة تعيد ترجمة فقط ما تغير فعلاً. قد لا يكون البناء الأول سريعاً بشكل كبير، لكن البناء الثاني والثالث والعاشر سيكون.

تحسينات رفع الأشجار

رفع الأشجار في Turbopack يعمل على مستوى أكثر دقة من webpack. لاحظنا أن حزم العميل الخاصة بنا كانت أصغر بنسبة 8-15% في المتوسط عبر مشاريعنا الثلاثة بدون تغييرات في الكود. جاءت أكبر الفوز من التعامل مع ملف الجرعات — Turbopack أفضل حقاً في القضاء على الإعادة غير المستخدمة من ملفات الفهرس.

دقة الوحدة

يحل Turbopack وحدات بشكل مختلف. أنها أسرع، لكنها أكثر صرامة أيضاً. إذا كان لديك أي مسارات استيراد غير دقيقة التي كان webpack يحلها بصمت (مثل امتدادات الملفات المفقودة في حالات حدية معينة، أو المسارات غير الحساسة للحالة على macOS التي تنقطع على Linux)، سوف يتعقبها Turbopack. تسبب هذا حوالي 30% من مشاكل الترحيل لدينا.

استراتيجية تقسيم الكود

خوارزمية تقسيم الأجزاء جديدة. ينشئ Turbopack بشكل افتراضي حزماً أصغر أكثر عدداً. يحسن هذا عموماً أداء التحميل للمتصفحات الحديثة مع HTTP/2، لكنه قد يزيد من إجمالي عدد الطلبات. رأينا عدد الأجزاء يزيد بنسبة تقريبية 40% بينما انخفض حجم الحزمة الكلي.

SWC مجباري الآن

إذا كنت لا تزال تتمسك بأي تكوين Babel، فقد انتهى الأمر. يستخدم Turbopack SWC حصرياً للتحويل. كان هذا بالفعل الاتجاه الذي تتحرك به الأمور، لكن Next.js 16 يزيل أي تراجع إلى Babel تماماً.

معايير أداء البناء

إليك أرقام حقيقية من مشاريع الترحيل الثلاثة. هذه ليست معايير تركيبية — إنها من تطبيقات عميل فعلية تعمل في خط أنابيب CI الخاص بنا على GitHub Actions (Ubuntu، 4 vCPU، عمال RAM 16GB).

المقياس Project A (التجارة الإلكترونية) Project B (لوحة معلومات SaaS) Project C (موقع المحتوى)
الصفحات/المسارات 847 124 2,340
بناء webpack (Next 15) 4 دقائق 32 ثانية 1 دقيقة 48 ثانية 6 دقائق 15 ثانية
بناء Turbopack (Next 16، بارد) 3 دقائق 10 ثواني 1 دقيقة 22 ثانية 4 دقائق 44 ثانية
بناء Turbopack (Next 16، ذاكرة دافئة) 1 دقيقة 5 ثواني 28 ثانية 1 دقيقة 52 ثانية
تغيير حجم الحزمة -12% -8% -14%
JS التحميل الأول (الصفحة الرئيسية) -18KB -7KB -22KB
ذروة ذاكرة البناء 3.8GB → 2.9GB 1.6GB → 1.2GB 4.2GB → 3.1GB

أرقام ذاكرة التخزين المؤقت الدافئة هي القصة الحقيقية. بمجرد أن يكون Turbopack قد قام ببناء مشروعك مرة واحدة، تصبح البناءات الإضافية أسرع بكثير. بالنسبة لمشروعنا الثقيل بالمحتوى Project C (الذي يستخدم CMS بدون رؤوس مع آلاف الصفحات المُنتجة بشكل ثابت)، الانتقال من 6+ دقائق إلى ما يقل عن دقيتين في البناءات المخزنة مؤقتاً كان كبيراً. هذا أموال حقيقية موفرة في دقائق CI.

كانت تحسينات استخدام الذاكرة ذات مغزى أيضاً. كان Project A يضرب أحياناً أخطاء OOM على عمال CI أصغر مع webpack. اختفت هذه المشكلة مع Turbopack.

Next.js 16 Turbopack Production Builds: What Changed and How We Migrated - architecture

التغييرات الكسرية التي تحتاج إلى معرفتها

إليك قائمة متنامية بكل ما انقطع فعلاً أثناء عمليات الترحيل الخاصة بنا. يغطي دليل ترقية Next.js 16 بعضاً من هذه، لكن القليل منها فاجأنا.

1. تكوين Webpack المخصص

هذا هو الكبير. إذا كان لديك مفتاح webpack في next.config.js الخاص بك، فهو لا يعمل بعد الآن. يحتوي Turbopack على واجهة برمجية تكوين خاصة به تحت turbopack في تكوين Next.js. لا توجد كل الأشياء لها خريطة 1:1.

// next.config.js — BEFORE (Next.js 15 مع webpack)
module.exports = {
  webpack: (config) => {
    config.module.rules.push({
      test: /\.svg$/,
      use: ['@svgr/webpack'],
    });
    return config;
  },
};
// next.config.js — AFTER (Next.js 16 مع Turbopack)
module.exports = {
  turbopack: {
    rules: {
      '*.svg': {
        loaders: ['@svgr/webpack'],
        as: '*.js',
      },
    },
  },
};

2. واجهات برمجية الطلب المتزامنة تمت إزالتها

هبطت Next.js 15 الوصول المتزامن إلى cookies() و headers() و params و searchParams. يزيل Next.js 16 هذه تماماً. إذا تجاهلت تنبيهات الاستهلاك هذه، فستحصل على وقت سيء.

// BEFORE — ينهار في Next.js 16
export default function Page({ params }) {
  const { slug } = params;
  return <div>{slug}</div>;
}

// AFTER
export default async function Page({ params }) {
  const { slug } = await params;
  return <div>{slug}</div>;
}

يبدو هذا تافهاً ولكنه لمس أكثر من 200 مكون عبر مشاريعنا. كتبنا codemod للتعامل مع معظمه (المزيد على ذلك أدناه).

3. React 18 لم يعد مدعوماً

يتطلب Next.js 16 React 19. إذا كانت لديك اعتماديات مثبتة على React 18، فهي بحاجة إلى تحديث. معظم المكتبات المدعومة جيداً كانت لديها دعم React 19 بحلول منتصف 2025، لكننا واجهنا عدد قليل من المحافظين.

4. تم حذف Node.js 18

الحد الأدنى هو Node.js 20. حدّث صور Docker وتكويناتك CI وملفات .nvmrc الخاصة بك.

5. next/image التغييرات

تمت إزالة الخاصية onLoadingComplete بالكامل (تم استهلاكها منذ Next.js 14). استخدم onLoad بدلاً من ذلك. خط أنابيب تحسين الصورة أيضاً يستخدم مكتبة أساسية جديدة، مما يعني أن صورك المحسنة المخزنة مؤقتاً ستتم إعادة إنشاء بناءً على الطلب الأول.

عملية الترحيل خطوة بخطوة

إليك العملية الفعلية التي اتبعناها. فعلنا Project B (الأصغر) أولاً كاختبار، ثم تناولنا A و C.

الخطوة 1: تدقيق الاعتماديات

قبل لمس Next.js، قمنا بتدقيق كل اعتماد لـ React 19 وتوافق Node.js 20. استخدمنا سكريبت بسيط:

npx npm-check-updates --target latest --filter '/react|next/'

تحققنا أيضاً يدوياً من أهم حزمنا: SDK CMS الخاص بنا، مكتبة المصادقة، ومكتبة مكون UI الخاصة بنا.

الخطوة 2: تحديث Node.js

حدثنا .nvmrc إلى 20.18.0 (أحدث LTS في الوقت)، وحدثنا Dockerfiles، وتحققنا من عمال CI. بسيط لكن سهل النسيان.

الخطوة 3: ترقية React أولاً

npm install react@19 react-dom@19 @types/react@19 @types/react-dom@19

قمنا بتشغيل مجموعة الاختبار الكاملة هنا قبل المتابعة. React 19 لديه تغييرات كسرية خاصة به (تم إزالة forwardRef كضرورة، ref الآن ملك عادي، use() hook مستقر). أصلحنا تلك المشاكل في معزل حتى لم نكن نصحح مشاكل React و Next.js في نفس الوقت.

الخطوة 4: تشغيل Next.js Codemod

يوفر Next.js codemod ترقية يتعامل مع الكثير من التغييرات الميكانيكية:

npx @next/codemod@latest upgrade

تعامل هذا مع حوالي 70% من التهجيرات API غير المتزامنة تلقائياً. إنه ليس مثالياً — تعامل مع بعض أنماط مكونات الخادم المعقدة الخاصة بنا — لكنه وفر لنا ساعات.

الخطوة 5: ترقية Next.js

npm install next@16

الخطوة 6: ترحيل next.config.js

كانت هذه أكثر الخطوات استهلاكاً للوقت بالنسبة لـ Project A، التي كانت لديها تخصيص webpack كبير. سأغطي الترجمات المحددة في القسم التالي.

الخطوة 7: إصلاح أخطاء البناء بشكل متكرر

قمنا بتشغيل next build وعملنا من خلال الأخطاء واحداً تلو الآخر. رسائل الخطأ من Turbopack أفضل فعلاً من webpack في معظم الحالات — أكثر دقة، مع مسارات ملفات أوضح واقتراحات.

الخطوة 8: اختبار الانحدار البصري

نستخدم Playwright للاختبارات E2E وقمنا بتشغيل مجموعة الانحدار البصري الخاصة بنا لالتقاط أي اختلافات في العرض. وجدنا مشكلتين: فرق في ترتيب CSS (معالجات Turbopack لواردات CSS بترتيب مختلف قليلاً عن webpack) واستيراد ديناميكي لم يكن ينقسم الكود بشكل صحيح.

الخطوة 9: التحقق من الأداء

قارنا درجات Lighthouse وـ Core Web Vitals قبل وبعد. تحسن كل مشروع أو بقي محايداً. لا انحدار.

ترجمات Webpack Config

هذا القسم للفرق ذات التكوينات webpack المخصصة. إليك كيف تترجم الأنماط الشائعة إلى Turbopack.

محملات مخصصة

// معادل Turbopack للمحملات المخصصة
module.exports = {
  turbopack: {
    rules: {
      '*.md': {
        loaders: ['raw-loader'],
        as: '*.js',
      },
      '*.graphql': {
        loaders: ['graphql-tag/loader'],
        as: '*.js',
      },
    },
  },
};

بدائل الوحدة

// تعمل بدائل الحل بشكل مشابه
module.exports = {
  turbopack: {
    resolveAlias: {
      'old-package': 'new-package',
      // يمكنك أيضاً الإشارة إلى ملفات محلية
      '@legacy/utils': './src/utils/legacy.ts',
    },
  },
};

ما لا يترجم

بعض مكونات webpack ببساطة لا توجد معادلات Turbopack لها حتى الآن:

  • webpack.DefinePlugin — استخدم env في next.config.js أو متغيرات بيئية مباشرة
  • BundleAnalyzerPlugin — تعمل حزمة @next/bundle-analyzer مع Turbopack اعتباراً من v16، لكن صيغة الإخراج تغيرت
  • تقسيم جزء مخصص عبر splitChunks — يتعامل Turbopack مع هذا تلقائياً ولا يفضح نفس مستوى التحكم. بصراحة، الإعدادات الافتراضية كافية لمعظم المشاريع.
  • webpack.IgnorePlugin — استخدم resolveAlias للإشارة إلى الواردات من الوحدات الفارغة

التعامل مع الحزم الخارجية

تسببت عدة حزم في مشاكل أثناء الترحيل:

@sentry/nextjs — تحتاج v9+ لتوافق Turbopack. الإصدارات السابقة خطافات في أجزاء webpack الداخلية. كان الترقية مباشرة لكنها تتطلب تغييرات التكوين.

next-intl — عملت بشكل جيد بعد التحديث إلى الإصدار الأحدث. اقتبست واجهة البرنامج بنظافة.

@vanilla-extract/next-plugin — كانت هذه أكبر صداعنا في Project B. لم يكن لدى مكون webpack لـ Vanilla Extract معادل Turbopack حتى إصدارهم 2.0. كان علينا الانتظار لذلك أو النظر في البدائل. انتظرنا.

حزم ملف الجرعات — أي حزمة تُصدِّر مئات المكونات من ملف فهرس واحد (تبحث عنك، مكتبات الأيقونات) يتم الآن رفع الأشجار بشكل أكثر عدوانية. هذا شيء جيد، لكننا رأينا حالة واحدة حيث لم يتم تضمين رمز يشار إليه بشكل ديناميكي. تحولنا من بحث الرموز المستند إلى السلسلة إلى الواردات المباشرة، وهي ممارسة أفضل على أي حال.

اعتبارات CSS و Tailwind

إذا كنت تستخدم Tailwind CSS (وتفعل معظم مشاريعنا)، فإن الترحيل سلس في الغالب. يعمل Tailwind v4 بشكل رائع مع Turbopack. لكن هناك بعض الأشياء التي يجب الانتباه لها:

ترتيب استيراد CSS

معالجات Turbopack لواردات CSS بترتيب حتمي لكن مختلف عن webpack. إذا كنت تعتمد على ترتيب الاستيراد للخصوصية (وأنت لا تريد أن تكون، لكن دعنا كن صادقين — ننتهي هناك جميعاً في بعض الأحيان)، قد ترى اختلافات بصرية. كان لدينا مشروع واحد حيث يتم تجاوز إعادة تعيين عام بواسطة CSS وحدة مكون لأن ترتيب الاستيراد تقلب.

كان الإصلاح هو استخدام @layer صريح في CSS الخاص بنا، وهو ما كان يجب أن نفعله طوال الوقت.

وحدات CSS

وحدات CSS تعمل بشكل متطابق. لا تغييرات مطلوبة. تبدو أسماء الفئات المُنتجة مختلفة (أقصر، فعلاً)، لكن هذا تجميلي إلا إذا كنت تفعل شيئاً غريباً مثل استهداف أسماء الفئات المُنتجة في الاختبارات.

PostCSS

يتم احترام ملفات تكوين PostCSS. يستمر ملف postcss.config.js الخاص بك في العمل. لا تغييرات مطلوبة هنا.

تحديثات النشر وخط أنابيب CI

أهدافنا الأساسية للنشر هي Vercel و AWS (عبر SST/OpenNext). إليك ما تغير:

Vercel: تم الكشف تلقائياً عن Next.js 16 واستخدام Turbopack. يعمل تكامل ذاكرة التخزين المؤقت في الصندوق. انخفضت أوقات البناء لدينا على Vercel بشكل أكثر دراماتيكية من CI المحلية لأن Vercel لديها تكامل عميق مع طبقة تخزين مؤقت Turbopack. ذهب Project C من ~8 دقائق إلى ~2.5 دقيقة على Vercel.

AWS/OpenNext: تطلب التحديث إلى OpenNext 4.x، والذي أضاف دعم إخراج Turbopack. تغيرت صيغة الإخراج قليلاً — يتم إعادة تنظيم بنية الدليل .next — لذلك كانت أي سكريبتات بعد البناء تشير إلى مسارات ملف محددة تحتاج إلى تحديث.

بناءات Docker: إذا كنت تبني Next.js في Docker، فأطلع صورتك الأساسية على Node 20+ واعلم أن دليل ذاكرة التخزين المؤقت Turbopack (.next/cache/turbopack) يجب أن يكون مضمناً في استراتيجية تخزين مؤقت طبقة Docker الخاصة بك. أضفنا طبقة COPY محددة لهذا.

# تحسين تخزين مؤقت طبقة Docker لـ Turbopack
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
# ذاكرة التخزين المؤقت لـ Turbopack
RUN --mount=type=cache,target=/app/.next/cache \
    npm run build

متى لا يجب الترحيل حالياً

لا أريد رسم هذا كما لو كان كل الورود. هناك أسباب شرعية للبقاء على Next.js 15 في الوقت الحالي:

  • الاعتماد الثقيل على مكون webpack: إذا كان بناؤك يعتمد على 3+ مكونات webpack مخصصة بدون معادلات Turbopack، فقد لا تكون تكلفة الترحيل تستحق ذلك حتى الآن.
  • Monorepo مع تكوين webpack مشترك: إذا كنت تشارك تكوين webpack عبر مشاريع Next.js وغير Next.js في monorepo، فإن تقسيم هذا التكوين يعتبر عملاً إضافياً.
  • متطلبات الاستقرار: Next.js 16.0 مستقر، لكن 16.1 و 16.2 أصلحا أخطاء حقيقية. أود الانتظار لما لا يقل عن 16.2+ قبل ترحيل أي شيء لا يمكنك تحمل الانقطاع عليه.
  • اعتماديات موروثة عالقة على React 18: إذا لم تضف اعتماد حرج دعم React 19، فأنت محجوب بغض النظر.

للفرق التي تقوم بـ تطوير CMS الخاص بك، يكون الترحيل أسلس بشكل عام لأن المواقع المدفوعة بـ CMS تميل إلى الحصول على تكوينات بناء أبسط.

الأسئلة الشائعة

هل Turbopack مستقر بما يكفي للإنتاج في Next.js 16؟ نعم. تطور Turbopack لأكثر من ثلاث سنوات، تم اختباره بشدة في وضع dev عبر ملايين مشاريع Next.js، ومر عبر بيتا ممتدة في بناءات الإنتاج خلال Next.js 15.3-15.5. كنا نديره في الإنتاج منذ إصدار 16.0 عبر مواقع عملاء متعددة بدون مشاكل متعلقة بالمجمع. وقال أن كنت على 16.0 تحديداً، ترقية إلى 16.2+ حيث تم حل عدد من أخطاء الحالات الحافة.

هل يمكنني لا تزال استخدام webpack مع Next.js 16؟ ليس كمجمع أساسي، لا. Turbopack هو المجمع الوحيد المدعوم في Next.js 16. إذا كنت بحاجة بشكل مطلق إلى webpack، فستحتاج إلى البقاء على Next.js 15، الذي سيتلقى تصحيحات أمنية خلال أوائل 2026. كانت Vercel واضحة بأن دعم webpack في Next.js قد انتهى.

ما مدى سرعة Turbopack مقارنة بـ webpack لبناءات الإنتاج؟ على بناءات باردة (بدون ذاكرة تخزين مؤقت)، رأينا تحسينات بنسبة 20-30%. على بناءات دافئة/مخزنة مؤقتاً، يقفز التحسن إلى 50-70%. الأرقام الدقيقة تعتمد بشكل كبير على حجم المشروع وعدد المسارات وكمية الإنشاء الثابت الذي يحدث. انخفض استخدام الذاكرة أيضاً بنسبة 20-30% بشكل متسق عبر مشاريعنا.

هل أحتاج إلى إعادة كتابة next.config.js الخاص بي لـ Turbopack؟ إذا كان لديك تكوين webpack مخصص في next.config.js الخاص بك، نعم — تحتاج كتل تلك إلى الترجمة إلى صيغة تكوين turbopack. إذا كنت تستخدم فقط خيارات تكوين Next.js القياسية (الصور والموجهات والإعادة والمتغيرات البيئية)، فتلك كلها تعمل بنفس الطريقة تماماً. جهد الترحيل متناسب مع مقدار تكوين webpack المخصص لديك.

هل خط CI/CD الموجود الخاص بي سيعمل مع Next.js 16؟ في الغالب نعم. الأشياء الرئيسية لتحديثها هي: إصدار Node.js (20 بحد أدنى)، وأي سكريبتات تشير إلى ملفات إخراج webpack محددة، وأي استراتيجيات تخزين مؤقت تستهدف .next/cache/webpack. ستريد تخزين مؤقت .next/cache/turbopack بدلاً من ذلك. إذا كنت تنشر إلى Vercel، يتم التعامل مع كل شيء تلقائياً.

هل يدعم Turbopack جميع الميزات نفسها التي يدعمها webpack في Next.js؟ بالنسبة لميزات Next.js المحددة، نعم — App Router وPages Router وAPI routes والمراسلة وISR وSSG وSSR جميعها تعمل. بالنسبة لتكوين webpack المخصص، يوجد حوالي 90% تكافؤ الميزات. الفجوات المتبقية تتعلق في الغالب بمكونات webpack متخصصة واستراتيجيات تقسيم جزء عالية التخصيص. تحقق من مستندات توافق Turbopack لحالة الاستخدام المحددة الخاصة بك.

هل يجب أن أقوم بالترحيل إلى Next.js 16 أم يجب أن أفكر في بدائل مثل Astro؟ هذا يعتمد على حالة الاستخدام الخاصة بك. إذا كنت تبني تطبيقات تفاعلية للغاية مع إدارة الحالة المعقدة، فإن Next.js 16 خيار قوي وتحسينات Turbopack تجعل DX أفضل بشكل كبير. إذا كنت تبني مواقع ثقيلة بالمحتوى بحد أدنى من التفاعل، فإن Astro يبقى بديلاً ممتازاً مع نموذج الترطيب الجزئي. كنا نبني مع كليهما واختيار بناءً على متطلبات المشروع. إذا كنت متأكداً، تواصل معنا وفي الاستطاعة نساعدك في التقييم.

ما الحد الأدنى من الوقت المطلوب لترحيل تطبيق Next.js 15 بحجم متوسط إلى 16؟ بالنسبة لتطبيق متوسط الحجم نموذجي (50-200 مسار، اعتماديات قياسية، تكوين webpack بحد أدنى)، قم بموازنة 2-4 أيام من وقت المطور. يتضمن ذلك تحديثات الاعتمادية والهجرات API غير المتزامنة والاختبارات والتحقق من الكود. إذا كان لديك تكوين webpack عملي أو اعتماديات موروثة، فقد يستغرق أسبوعاً أو أكثر. يقدم فريقنا في Social Animal خدمات الترحيل إذا كنت تفضل عدم بحرق sprint فريقك في عمل البنية التحتية.