تتبع ملفات الخرج في Next.js
تتتبع Next.js تقائيًا كل صفحة واعتمادياتها أثناء بناء التطبيق لتحديد جميع الملفات المطلوبة لنشر نسخة الإنتاج من التطبيق، تتيح ذلك إمكانية تقليل حجم ملفات النشر. فعندما استخدمت Docker سابقًا لنشر تطبيقك، كنت بحاجة إلى تثبيت جميع ملفات الاعتماديات dependencies
التي تشير إليها حزمة التطبيق حتى تستطيع تشغيله next start
. لكن بإمكانك ابتداءً من النسخة 12 تتبع ملفات الخرج في المجلد /next.
كي يضم فقط الملفات الضرورية. تلغي هذه الميزة أيضًا الحاجة إلى الوجهة serverless
الملغاة التي قد تسبب مشاكل عدة، وتنشئ نسخًا إضافيةً غير ضرورية.
كيف تعمل ميزة تتبع ملفات الخرج
تستخدم Next.js التوجيه vercel/nft@
أثناء بناء التطبيق next build
لتحلل كل من import
و require
و fs
بشكل ساكن لتحديد جميع الملفات التي قد تحمّلها الصفحة. كما يجري التحقق من الملفات التي يحتاجها خادم إنتاج Next.js ووضعها في ملف الخرج next/next-server.js.nft.json.
الذي يمكن رفعه في مرحلة الإنتاج.
ولرفع الملفات ذات الامتداد nft.json.
المنتقلة إلى مجلد الخرج next.
، بإمكانك قراءة قائمة الملفات التي تنتهي بالامتداد nft.json.
في كل ملف تتبع ونسخها إلى مكان نشر التطبيق.
النسخ التلقائي للملفات المُتتبعة (ميزة تجريبية)
يمكن أن تُنشئ Next.js مجلد قائم بذاته standalone
ينسخ الملفات الضرورية لنشر نسخة الإنتاج فقط بما في ذلك الملفات الموجودة في المجلد node_modules
. ولتشغيل النسخ التلقائي، عليك أولًا تفعيل الميزة outputStandalone
في الملف next.config.js
:
module.exports = {
experimental: {
outputStandalone: true,
},
}
سينتج عن ذلك المجلد next/standalone
الذي يمكن نشره بشكل مستقل دون الحاجة إلى تثبيت.
إضافة إلى ذلك، بإمكانك استخدام ملف JavaScript المصغر server.js
الذي ينتج عن العملية بدلًا من next start
. لا ينسخ الخادم المصغّر السابق (server.js
) المجلدين public
أو .next/static
افتراضيًا لأن من يتعامل معهما عادة هي شبكة توزيع المحتوى CDN. مع ذلك يمكن نسخ محتوى هذين المجلدين إلى standalone/public
و standalone/.next/static
يدويًا ليخدّمهما الملف server.js
تلقائيًا بعد ذلك.
التحفظات على تتبع ملفات الخرج
- يُستخدم مجلد المشروع افتراضيًا للتتبع في حال كان مهيّأً ضمن مستودع وحيد monorepo. أما عند تنفيذ الأمر
next build packages/web-app
، سيكون المجلدpackages/web-app
هو الجذر الذي يستخدم للتتبع ولن تتضمن عملية التتبع أي ملف خارج هذا المجلد. ولإضافة الملفات التي تقع خارجه، لا بد من ضبط قيمةexperimental.outputFileTracingRoot
في ملف التهيئةnext.config.js
:
// packages/web-app/next.config.js
module.exports = {
experimental: {
// سيضيف ذلك ملفات من قاعدة المستودع الوحيد وصولًا إلى مجلدين أعلى
outputFileTracingRoot: path.join(__dirname, '../../'),
},
}
- قد تخفق Next.js أحيانًا في تضمين بعض الملفات المطلوبة أو قد تضم ملفات غير مستخدمة. بإمكانك في هذه الحالات تصدير خاصيتي تهيئة الصفحة
unstable_includeFiles
وunstable_excludeFiles
بالترتيب. إذ تقبل كل خاصية مصفوفة من تعابير المطابقة minimatch globs المرتبطة بجذر المشروع لتضمين أو إزالة الملفات أثناء التتبع. - لا تقدّم Next.js أي شيء حاليًا للملفات
nft.json.
، وينبغي أن تُقرأ من قبل المنصة التي ستنشر عليها التطبيق (مثل Vercel) كي يجري نشره بأصغر حزمة ممكنة. لكن قد يظهر أمر جديد في النسخات المستقبلة لاستغلال ملفاتnft.json.
.