هيكل المشروع وتنظيمه
توفر هذه الصفحة نظرة عامة على جميع اصطلاحات المجلدات والملفات في Next.js، وتوصيات لتنظيم مشروعك.
اصطلاحات المجلدات والملفات
مجلدات المستوى الأعلى
تُستخدم مجلدات المستوى الأعلى لتنظيم كود التطبيق والأصول الثابتة.

app | موجه التطبيق (App Router) |
pages | موجه الصفحات (Pages Router) |
public | الأصول الثابتة التي سيتم تقديمها |
src | مجلد مصدر التطبيق الاختياري |
ملفات المستوى الأعلى
تُستخدم ملفات المستوى الأعلى لتكوين التطبيق، وإدارة التبعيات، وتشغيل الوسيط (middleware)، ودمج أدوات المراقبة، وتحديد متغيرات البيئة.
Next.js | |
next.config.js | ملف تكوين Next.js |
package.json | تبعيات المشروع والنصوص البرمجية |
instrumentation.ts | ملف OpenTelemetry والأدوات (Instrumentation) |
middleware.ts | وسيط طلبات Next.js |
.env | متغيرات البيئة |
.env.local | متغيرات البيئة المحلية |
.env.production | متغيرات بيئة الإنتاج |
.env.development | متغيرات بيئة التطوير |
.eslintrc.json | ملف تكوين ESLint |
.gitignore | ملفات ومجلدات Git لتجاهلها |
next-env.d.ts | ملف تعريف TypeScript لـ Next.js |
tsconfig.json | ملف تكوين TypeScript |
jsconfig.json | ملف تكوين JavaScript |
ملفات التوجيه (Routing)
layout | .js .jsx .tsx | التخطيط (Layout) |
page | .js .jsx .tsx | الصفحة (Page) |
loading | .js .jsx .tsx | واجهة التحميل (Loading UI) |
not-found | .js .jsx .tsx | واجهة غير موجود (Not found UI) |
error | .js .jsx .tsx | واجهة الخطأ (Error UI) |
global-error | .js .jsx .tsx | واجهة الخطأ العامة (Global error UI) |
route | .js .ts | نقطة نهاية API |
template | .js .jsx .tsx | التخطيط المعاد تصييره |
default | .js .jsx .tsx | صفحة الاحتياطي للطرق المتوازية |
الطرق المتداخلة (Nested routes)
folder | مقطع الطريق (Route segment) |
folder/folder | مقطع طريق متداخل (Nested route segment) |
الطرق الديناميكية (Dynamic routes)
[folder] | مقطع طريق ديناميكي |
[...folder] | مقطع طريق شامل (Catch-all) |
[[...folder]] | مقطع طريق شامل اختياري |
مجموعات الطرق والمجلدات الخاصة
الطرق المتوازية والمقاطعة (Parallel and Intercepted Routes)
@folder | فتحة مسماة (Named slot) |
(.)folder | اعتراض نفس المستوى |
(..)folder | اعتراض مستوى واحد أعلى |
(..)(..)folder | اعتراض مستويين أعلى |
(...)folder | اعتراض من الجذر (root) |
اصطلاحات ملفات البيانات الوصفية (Metadata)
أيقونات التطبيق
favicon | .ico | ملف الأيقونة المفضلة (Favicon) |
icon | .ico .jpg .jpeg .png .svg | ملف أيقونة التطبيق |
icon | .js .ts .tsx | أيقونة التطبيق المولدة |
apple-icon | .jpg .jpeg , .png | ملف أيقونة Apple |
apple-icon | .js .ts .tsx | أيقونة Apple المولدة |
صور Open Graph و Twitter
opengraph-image | .jpg .jpeg .png .gif | ملف صورة Open Graph |
opengraph-image | .js .ts .tsx | صورة Open Graph المولدة |
twitter-image | .jpg .jpeg .png .gif | ملف صورة Twitter |
twitter-image | .js .ts .tsx | صورة Twitter المولدة |
تحسين محركات البحث (SEO)
sitemap | .xml | ملف خريطة الموقع (Sitemap) |
sitemap | .js .ts | خريطة الموقع المولدة |
robots | .txt | ملف robots.txt |
robots | .js .ts | ملف robots المولد |
تنظيم مشروعك
Next.js غير متحيز بشأن كيفية تنظيم وترتيب ملفات مشروعك. ولكنه يوفر عدة ميزات لمساعدتك في تنظيم مشروعك.
تسلسل المكونات (Component hierarchy)
يتم عرض المكونات المحددة في الملفات الخاصة بتسلسل محدد:
layout.js
template.js
error.js
(حدود خطأ React)loading.js
(حدود تعليق React)not-found.js
(حدود خطأ React)page.js
أوlayout.js
متداخل

يتم عرض المكونات بشكل متكرر في الطرق المتداخلة، مما يعني أن مكونات مقطع الطريق ستكون متداخلة داخل مكونات المقطع الأب.

التنسيق المكاني (Colocation)
في دليل app
، تحدد المجلدات المتداخلة بنية المسار (route). كل مجلد يمثل جزءًا من المسار (route segment) يتم تعيينه إلى جزء مقابل في مسار URL.
ومع ذلك، على الرغم من أن بنية المسار تُحدد من خلال المجلدات، إلا أن المسار غير متاح للجمهور حتى يتم إضافة ملف page.js
أو route.js
إلى جزء المسار.

وحتى عندما يصبح المسار متاحًا للجمهور، فإن المحتوى المُعاد فقط من خلال page.js
أو route.js
هو الذي يتم إرساله إلى العميل.

هذا يعني أنه يمكن تنسيق ملفات المشروع بأمان داخل أجزاء المسار في دليل app
دون أن تصبح قابلة للتوجيه بالخطأ.

معلومة مفيدة: بينما يمكنك تنسيق ملفات مشروعك في
app
، إلا أنك لست مضطرًا لذلك. إذا كنت تفضل، يمكنك إبقاؤها خارج دليلapp
.
المجلدات الخاصة (Private Folders)
يمكن إنشاء مجلدات خاصة عن طريق إضافة شرطة سفلية كبادئة لاسم المجلد: _folderName
هذا يشير إلى أن المجلد هو تفاصيل تنفيذ خاصة ولا يجب أن تؤخذ بعين الاعتبار من قبل نظام التوجيه، مما يستثني المجلد وجميع مجلداته الفرعية من التوجيه.

بما أن الملفات في دليل app
يمكن تنسيقها بأمان افتراضيًا، فإن المجلدات الخاصة ليست مطلوبة للتنسيق المكاني. ومع ذلك، يمكن أن تكون مفيدة لـ:
- فصل منطق واجهة المستخدم عن منطق التوجيه.
- تنظيم الملفات الداخلية بشكل متسق عبر المشروع وبيئة Next.js.
- فرز وتجميع الملفات في محررات الأكواد.
- تجنب التعارضات المحتملة في التسمية مع اصطلاحات ملفات Next.js المستقبلية.
معلومة مفيدة:
- على الرغم من أنها ليست اصطلاحًا في الإطار، يمكنك أيضًا التفكير في تمييز الملفات خارج المجلدات الخاصة كـ "خاصة" باستخدام نفس نمط الشرطة السفلية.
- يمكنك إنشاء أجزاء URL تبدأ بشرطة سفلية عن طريق إضافة
%5F
(الشكل المشفر لـ URL للشرطة السفلية) كبادئة لاسم المجلد:%5FfolderName
.- إذا كنت لا تستخدم المجلدات الخاصة، سيكون من المفهم معرفة اصطلاحات الملفات الخاصة بـ Next.js لتجنب تعارضات التسمية غير المتوقعة.
مجموعات المسارات (Route Groups)
يمكن إنشاء مجموعات المسارات عن طريق لف مجلد بين قوسين: (folderName)
هذا يشير إلى أن المجلد هو لأغراض تنظيمية ويجب ألا يُدرج في مسار URL.

مجموعات المسارات مفيدة لـ:
- تنظيم المسارات حسب قسم الموقع، الغرض، أو الفريق. مثل صفحات التسويق، صفحات الإدارة، إلخ.
- تمكين التخطيطات المتداخلة في نفس مستوى جزء المسار:
مجلد src
يدعم Next.js تخزين كود التطبيق (بما في ذلك app
) داخل مجلد src
اختياري. هذا يفصل كود التطبيق عن ملفات تكوين المشروع التي تعيش غالبًا في جذر المشروع.

أمثلة
يُدرج القسم التالي نظرة عامة عالية المستوى على الاستراتيجيات الشائعة. النصيحة الأساسية هي اختيار استراتيجية تناسبك وفريقك والالتزام بها عبر المشروع.
معلومة مفيدة: في الأمثلة أدناه، نستخدم مجلدات
components
وlib
كعناصر نائبة عامة، تسمياتها ليس لها أهمية خاصة في الإطار وقد تستخدم مشاريعك مجلدات أخرى مثلui
،utils
،hooks
،styles
، إلخ.
تخزين ملفات المشروع خارج app
هذه الاستراتيجية تخزن جميع أكواد التطبيق في مجلدات مشتركة في جذر مشروعك وتحافظ على دليل app
لأغراض التوجيه فقط.

تخزين ملفات المشروع في مجلدات عليا داخل app
هذه الاستراتيجية تخزن جميع أكواد التطبيق في مجلدات مشتركة في جذر دليل app
.

تقسيم ملفات المشروع حسب الميزة أو المسار
هذه الاستراتيجية تخزن أكواد التطبيق المشتركة عالميًا في جذر دليل app
وتقسم أكواد التطبيق الأكثر تحديدًا إلى أجزاء المسار التي تستخدمها.

تنظيم المسارات دون التأثير على مسار URL
لتنظيم المسارات دون التأثير على URL، أنشئ مجموعة لإبقاء المسارات ذات الصلة معًا. سيتم حذف المجلدات بين القوسين من URL (مثل (marketing)
أو (shop)
).

على الرغم من أن المسارات داخل (marketing)
و (shop)
تشترك في نفس التسلسل الهرمي لـ URL، يمكنك إنشاء تخطيط مختلف لكل مجموعة عن طريق إضافة ملف layout.js
داخل مجلداتها.

اختيار أجزاء محددة لتخطيط معين
لاختيار مسارات معينة لتخطيط معين، أنشئ مجموعة مسار جديدة (مثل (shop)
) وانقل المسارات التي تشترك في نفس التخطيط إلى المجموعة (مثل account
و cart
). المسارات خارج المجموعة لن تشترك في التخطيط (مثل checkout
).

اختيار هيكل تحميل (loading skeleton) لمسار معين
لتطبيق هيكل تحميل عبر ملف loading.js
على مسار معين، أنشئ مجموعة مسار جديدة (مثل /(overview)
) ثم انقل ملف loading.tsx
داخل مجموعة المسار هذه.

الآن، سيتم تطبيق ملف loading.tsx
فقط على صفحة dashboard → overview بدلاً من جميع صفحات dashboard دون التأثير على هيكل مسار URL.
إنشاء تخطيطات جذر متعددة
لإنشاء عدة تخطيطات جذر، احذف ملف layout.js
الأعلى مستوى، وأضف ملف layout.js
داخل كل مجموعة مسار. هذا مفيد لتقسيم التطبيق إلى أقسام لها واجهة مستخدم أو تجربة مختلفة تمامًا. يجب إضافة العلامات <html>
و <body>
إلى كل تخطيط جذر.

في المثال أعلاه، كل من (marketing)
و (shop)
لهما تخطيط جذر خاص به.