كيفية تحسين تجميع الحزم

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

تحليل حزم JavaScript

@next/bundle-analyzer هو إضافة لـ Next.js تساعدك في إدارة حجم حزم تطبيقك. يقوم بإنشاء تقرير مرئي لحجم كل حزمة والتبعيات الخاصة بها. يمكنك استخدام هذه المعلومات لإزالة التبعيات الكبيرة، أو تقسيم، أو تحميل الكود بطريقة كسولة (lazy-load).

التثبيت

قم بتثبيت الإضافة عن طريق تنفيذ الأمر التالي:

npm i @next/bundle-analyzer
# أو
yarn add @next/bundle-analyzer
# أو
pnpm add @next/bundle-analyzer

ثم، أضف إعدادات محلل الحزم إلى ملف next.config.js الخاص بك.

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {}

const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true',
})

module.exports = withBundleAnalyzer(nextConfig)

إنشاء تقرير

قم بتنفيذ الأمر التالي لتحليل حزمك:

ANALYZE=true npm run build
# أو
ANALYZE=true yarn build
# أو
ANALYZE=true pnpm build

سيتم فتح التقرير في ثلاث علامات تبويب جديدة في متصفحك، والتي يمكنك فحصها. يمكن أن يساعدك التقييم الدوري لحزم تطبيقك في الحفاظ على أداء التطبيق بمرور الوقت.

تحسين استيراد الحزم

بعض الحزم، مثل مكتبات الأيقونات، يمكنها تصدير مئات الوحدات، مما قد يسبب مشاكل في الأداء أثناء التطوير والإنتاج.

يمكنك تحسين طريقة استيراد هذه الحزم عن طريق إضافة خيار optimizePackageImports إلى ملف next.config.js الخاص بك. هذا الخيار سيقوم بتحميل الوحدات التي تستخدمها فعليًا فقط، مع الحفاظ على راحتك في كتابة عبارات الاستيراد مع العديد من الصادرات المسماة.

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    optimizePackageImports: ['icon-library'],
  },
}

module.exports = nextConfig

تقوم Next.js أيضًا بتحسين بعض المكتبات تلقائيًا، وبالتالي لا تحتاج إلى تضمينها في قائمة optimizePackageImports. راجع القائمة الكاملة.

تجميع حزم محددة

لتجميع حزم محددة، يمكنك استخدام خيار transpilePackages في ملف next.config.js الخاص بك. هذا الخيار مفيد لتجميع الحزم الخارجية التي لم يتم تجميعها مسبقًا، على سبيل المثال، في مستودع أحادي (monorepo) أو مستوردة من node_modules.

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['package-name'],
}

module.exports = nextConfig

تجميع جميع الحزم

لتجميع جميع الحزم تلقائيًا (السلوك الافتراضي في موجه التطبيق)، يمكنك استخدام خيار bundlePagesRouterDependencies في ملف next.config.js الخاص بك.

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  bundlePagesRouterDependencies: true,
}

module.exports = nextConfig

استثناء حزم محددة من التجميع

إذا كنت قد مكنت خيار bundlePagesRouterDependencies، يمكنك استثناء حزم محددة من التجميع التلقائي باستخدام خيار serverExternalPackages في ملف next.config.js الخاص بك:

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  # تجميع الحزم الخارجية تلقائيًا في موجه الصفحات:
  bundlePagesRouterDependencies: true,
  # استثناء حزم محددة من التجميع لكل من موجه التطبيق وموجه الصفحات:
  serverExternalPackages: ['package-name'],
}

module.exports = nextConfig