Next.js: إعداد البيئة وهيكل المشروع

آخر تحديث: 2026-08-26

إعداد بيئة تطوير Next.js 16 يشبه تجديد منزل جديد — السقالات تساعدك في وضع الأساس، وباقي الهيكل والتخطيط والتكوين يمكن تعديلها جميعًا حسب الحاجة.

1. ما ستتعلمه



2. قصة حقيقية لمبتدئ في الواجهة الأمامية

(1) نقطة الألم: يستغرق إعداد بيئة التطوير ثلاثة أيام

تشارلي مبتدئ في الواجهة الأمامية تعلم React للتو ويريد تجربة Next.js. يفتح التوثيق الرسمي، ويواجه عشرات خيارات التكوين وثلاثة أوامر سقالات مختلفة، ولا يعرف أيها يختار:

"مع create-react-app، يمكنني تشغيله بأمر واحد. لكن مع Next.js، هل أحتاج إلى دليل src/؟ هل أحتاج إلى TypeScript؟ هل أحتاج إلى ESLint؟ هل أحتاج إلى Tailwind؟ مجرد معرفة هذه الخيارات استغرق مني يومين."

كما واجه المشكلات التالية:

المشكلة الأعراض
صعوبة اختيار الإعدادات 7 خيارات — غير متأكد أيها يفعل
لا أفهم هيكل الدليل أدوار app/ وpublic/ وstyles/ غير واضحة
إعادة التحميل الساخن بطيئة جدًا مع Webpack، يجب الانتظار 1-2 ثانية في كل مرة أحفظ فيها
لا توجد مساعدة في VS Code لا تلميحات، لا إكمال تلقائي — مثل الكتابة في Notepad

(2) حل create-next-app

استخدم سقالات create-next-app التفاعلية لتوليد هيكل مشروع بأفضل الممارسات بنقرة واحدة.

BASH
# أمر تفاعلي، فقط أجب عن بعض الأسئلة البسيطة
npx create-next-app@latest taskflow --ts --tailwind --app --src-dir --import-alias "@/*"

(3) النتائج

البعد قبل (الإعداد اليدوي) بعد (create-next-app)
وقت إعداد المشروع يومان من البحث 3 دقائق
سرعة HMR 1-2s (Webpack) 3-10ms (Turbopack)
تلميحات الكود لا شيء إكمال تلقائي لـ JSX + تلميحات أسماء فئات Tailwind
فهم جدول المحتويات ارتباك منظم حسب الوظيفة، سهل الفهم


3. سقالات create-next-app

(1) الإنشاء التفاعلي

BASH
# تشغيل أمر السقالات
npx create-next-app@latest

سترى الخيارات التفاعلية التالية:

TEXT 📖 للعرض فقط
? What is your project named?  taskflow
? Would you like to use TypeScript?  Yes / No
? Would you like to use ESLint?  Yes / No
? Would you like to use Tailwind CSS?  Yes / No
? Would you like to use `src/` directory?  Yes / No
? Would you like to use App Router? (recommended)  Yes / No
? Would you like to customize the import alias (`@/*` by default)?  No

(2) التكوين الموصى به (المستخدم في هذا البرنامج التعليمي)

BASH
# الخيارات الموصى بها لهذا البرنامج التعليمي (جميع المشاريع تستخدم هذه المجموعة)
npx create-next-app@latest taskflow ^
  --typescript ^
  --eslint ^
  --tailwind ^
  --src-dir ^
  --app ^
  --import-alias "@/*"
الخيار القيمة السبب
TypeScript نعم معيار للمشاريع على مستوى الإنتاج، أمان الأنواع
ESLint نعم ضمان جودة الكود
Tailwind CSS نعم مستخدم في جميع أنحاء هذا البرنامج التعليمي
دليل src/ نعم فصل الكود عن التكوين
App Router نعم نظام التوجيه الافتراضي في Next.js 16
اسم مستعار للاستيراد @/* مسار استيراد مختصر

▶ مثال: العملية الكاملة لإنشاء السقالات

BASH
# ============================================
# إنشاء مشروع جديد باسم shophub
# ============================================

npx create-next-app@latest shophub --ts --tailwind --app --src-dir

# مخرجات الطرفية
cd shophub
npm run dev

المخرجات:

TEXT 📖 للعرض فقط
Creating a new Next.js project in C:\Users\Charlie\shophub.

✔ Would you like to use TypeScript? … Yes
✔ Would you like to use ESLint? … Yes
✔ Would you like to use Tailwind CSS? … Yes
✔ Would you like to use `src/` directory? … Yes
✔ Would you like to use App Router? (recommended) … Yes
✔ Would you like to customize the import alias? … @/*

Success! Created shophub at shophub
Inside that directory, you can run:
  npm run dev       # تشغيل خادم التطوير
  npm run build     # بناء نسخة الإنتاج
  npm start         # تشغيل خادم الإنتاج

(3) هيكل المشروع الذي تولده السقالات

100%
graph TB
    A[shophub/] --> B[src/]
    A --> C[public/]
    A --> D[ملفات تكوين أخرى]
    B --> E[app/]
    B --> F[app/globals.css]
    B --> G[app/layout.tsx]
    B --> H[app/page.tsx]
    C --> I[favicon.ico]
    C --> J[الصور والموارد الثابتة الأخرى]
    D --> K[package.json]
    D --> L[tsconfig.json]
    D --> M[next.config.ts]
    D --> N[tailwind.config.ts]
    D --> O[postcss.config.mjs]

    style B fill:#d4edda
    style C fill:#f8d7da
    style E fill:#cce5ff


4. شرح تفصيلي لهيكل دليل المشروع

(1) src/app/ — قلب كود التطبيق

الملف الغرض مطلوب؟
layout.tsx التخطيط الجذري (يغلف جميع الصفحات) ✅ مطلوب
page.tsx الصفحة الرئيسية (موجهة عبر /) ✅ مطلوب
globals.css الأنماط العامة موصى به
favicon.ico أيقونة الموقع اختياري

▶ مثال: ملف app/page.tsx الافتراضي

المخرجات:

TEXT 📖 للعرض فقط
Diagram: shophub/; src/; public/; ملفات تكوين أخرى; app/; app/globals.css.
TSX
// ============================================
// create-next-app الصفحة الرئيسية الافتراضية
// ============================================

import Image from "next/image";

export default function Home() {
  return (
    <div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
      <main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
        <Image
          className="dark:invert"
          src="/next.svg"
          alt="Next.js logo"
          width={180}
          height={38}
          priority
        />
        <ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
          <li className="mb-2">
            Get started by editing{" "}
            <code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
              src/app/page.tsx
            </code>
          </li>
          <li>Save and see your changes instantly.</li>
        </ol>
        <div className="flex gap-4 items-center flex-col sm:flex-row">
          <a className="...">Deploy now</a>
          <a className="...">Read our docs</a>
        </div>
      </main>
    </div>
  );
}

المخرجات:

TEXT 📖 للعرض فقط
يعرض: مكون Home مع عناصر واجهة المستخدم الموصوفة.

المخرجات:

TEXT 📖 للعرض فقط
افتح في المتصفح http://localhost:3000، كما ترى:
- شعار Next.js الرسمي
- عرض "Get started by editing src/app/page.tsx"
- رابطا "Deploy now" و"Read our docs"
- استجابة للوضع الداكن/الفاتح

(2) public/ — دليل الموارد الثابتة

TEXT 📖 للعرض فقط
public/
├── favicon.ico      # أيقونة علامة تبويب المتصفح
├── file.svg         # أيقونة نوع الملف
├── globe.svg        # أيقونة الكرة الأرضية
├── next.svg         # شعار Next.js
├── vercel.svg       # شعار Vercel
└── window.svg       # أيقونة النافذة

جميع الملفات الموجودة تحت public/ يمكن الوصول إليها مباشرة عبر المسار الجذري /:

TSX
// الإشارة إلى الصور في دليل public داخل المكون
<img src="/logo.png" alt="Logo" />
// أو استخدام مكون next/image
import Image from 'next/image';
<Image src="/logo.png" alt="Logo" width={200} height={100} />

(3) ملفات التكوين الجذرية

الملف الغرض تكرار التعديل
next.config.ts تكوين وقت ترجمة Next.js منخفض (يُعد عند بدء المشروع)
tsconfig.json خيارات ترجمة TypeScript منخفض
tailwind.config.ts سمات/إضافات Tailwind CSS متوسط (إضافة ألوان مخصصة)
postcss.config.mjs تكوين إضافة PostCSS منخفض جدًا
package.json تبعيات المشروع + سكربتات NPM متوسط (عند إضافة تبعيات)
.eslintrc.json قواعد ESLint منخفض

▶ مثال: تكوين next.config.ts

المخرجات:

TEXT 📖 للعرض فقط
TypeScript compiled.
TS
// ============================================
// next.config.ts — تكوين وقت ترجمة Next.js
// ============================================

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  // السماح بتحميل الصور الخارجية من النطاقات المحددة
  images: {
    remotePatterns: [
      {
        protocol: "https",
        hostname: "fakestoreapi.com",
      },
      {
        protocol: "https",
        hostname: "images.unsplash.com",
      },
    ],
  },

  // تفعيل PPR (العرض المسبق الجزئي)
  experimental: {
    ppr: true,
  },
};

export default nextConfig;

المخرجات:

TEXT 📖 للعرض فقط
المكون يعرض واجهة المستخدم الخاصة به.

المخرجات:

TEXT 📖 للعرض فقط
بعد تفعيل التكوين:
1. مكونات <Image> يمكنها تحميل الصور من fakestoreapi.com وimages.unsplash.com
2. المحتوى بعد حدود Suspense في الصفحة سيستخدم عرض PPR المتدفق
3. أعد تشغيل npm run dev ليصبح التكوين ساريًا


5. خوادم التطوير وTurbopack

(1) تشغيل خادم التطوير

BASH
# الانتقال إلى دليل المشروع
cd shophub

# تشغيل خادم التطوير
npm run dev

▶ مثال: تجربة إعادة التحميل الساخن المباشر مع Turbopack

المخرجات:

TEXT 📖 للعرض فقط
  ▲ Next.js 16.0.0
  - Local:        http://localhost:3000
  - Environments: .env.local

 ✓ Starting...
 ✓ Ready in 1.2s
BASH
# ============================================
# تشغيل خادم التطوير، ملاحظة سرعة Turbopack القصوى في HMR
# ============================================

npm run dev

# مخرجات الطرفية
> shophub@0.1.0 dev
> next dev

  ▲  ▲
  ▲  Next.js 16.2
  ▲  - Local: http://localhost:3000
  ▲  - Turbopack: ✓ loaded in 742ms

✔ Compiled /src/app/page.tsx in 142ms (modules: 523)

الآن عدّل src/app/page.tsx لتغيير أي نص، ثم احفظ:

TEXT 📖 للعرض فقط
✔ Updated /src/app/page.tsx in 4ms    ← 4 ميلي ثانية! تحديثات شبه فورية

المخرجات:

TEXT 📖 للعرض فقط
  ▲ Next.js 16.2
  - Local: http://localhost:3000
  - Turbopack: ✓ loaded in 742ms

✔ Compiled /src/app/page.tsx in 142ms (modules: 523)
✔ Updated /src/app/page.tsx in 4ms    ← 4 ميلي ثانية! تحديثات شبه فورية

مقارنة بـ Webpack:

العملية Webpack (v15) Turbopack (v16) تحسين الأداء
بدء التشغيل البارد 5–10 s 0.7–1.2 s 8x
إعادة تحميل ساخن لملف واحد 50–200 ms 2–10 ms 20x
بناء مشاريع كبيرة الأساس أسرع بـ 10 مرات 10x

(2) npm run build بناء الإنتاج

BASH
# بناء نسخة الإنتاج
npm run build

المخرجات:

TEXT 📖 للعرض فقط
✓ Linting and checking validity of types
✓ Collecting page data
✓ Generating static pages (5/5)
✓ Collecting build traces
✓ Finalizing page optimization

Route (app)                              Size     First Load JS
┌ ○ /                                    5.1 kB          89 kB
├ ○ /_not-found                          152 B          84.1 kB
└ λ /api/hello                           0 B            84.1 kB
+ First Load JS shared by all            84.1 kB
  ├ chunks/main-app                      ...
  └ chunks/webpack                       ...

○  (Static)  توليد ثابت (SSG)
λ  (Dynamic) عرض ديناميكي (SSR)

▶ مثال: "npm run build" يعرض نوع المسار

المخرجات:

TEXT 📖 للعرض فقط
(انظر المخرجات أعلاه)
BASH
# ============================================
# تفسير مخرجات بناء الإنتاج
# ============================================

# لنفترض أنه تم إنشاء صفحتين:
# app/about/page.tsx وapp/dashboard/page.tsx
# من بينها dashboard تستخدم دوال ديناميكية cookies()

npm run build

# معنى الرموز في المخرجات:
○  /              # صفحة ثابتة (لا دوال ديناميكية)
○  /about         # صفحة ثابتة
λ  /dashboard     # صفحة ديناميكية (استخدمت API ديناميكي)
○  /_not-found    # صفحة 404

المخرجات:

TEXT 📖 للعرض فقط
Route (app)                              Size     First Load JS
┌ ○ /                                    5.1 kB          89 kB
├ ○ /about                               3.2 kB          87 kB
├ λ /dashboard                           6.8 kB          92 kB
└ ○ /_not-found                          152 B          84.1 kB

المخرجات:

TEXT 📖 للعرض فقط
Route (app)                              Size     First Load JS
┌ ○ /                                    5.1 kB          89 kB
├ ○ /about                               3.2 kB          87 kB
├ λ /dashboard                           6.8 kB          92 kB
└ ○ /_not-found                          152 B          84.1 kB

○  (Static)  توليد ثابت (SSG)
λ  (Dynamic) عرض ديناميكي (SSR)

(3) npm start خادم الإنتاج

BASH
# تشغيل خادم الإنتاج بعد النشر
npm run build
npm start
💡 تلميح: npm start يجب تشغيله بعد npm run build؛ فهو يشغل نسخة الإنتاج المحسنة، وليس نسخة التطوير.



6. فهم السكربتات في package.json

(1) قائمة السكربتات الافتراضية

JSON
{
  "name": "shophub",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "next": "^16.2.0",
    "react": "^19.0.0",
    "react-dom": "^19.0.0"
  },
  "devDependencies": {
    "@types/node": "^22.0.0",
    "@types/react": "^19.0.0",
    "@types/react-dom": "^19.0.0",
    "typescript": "^5.7.0",
    "tailwindcss": "^4.0.0",
    "eslint": "^9.0.0",
    "@eslint/eslintrc": "^3.0.0"
  }
}
السكربت الأمر الغرض
npm run dev next dev تشغيل خادم التطوير (Turbopack)
npm run build next build بناء الإنتاج
npm start next start تشغيل خادم الإنتاج
npm run lint next lint فحص نمط الكود

▶ مثال: إضافة سكربت مخصص

المخرجات:

TEXT 📖 للعرض فقط
JSON structure with scripts (dev, build, start, lint, type-check, format, preview) and their corresponding CLI commands.
JSON
// ============================================
// إضافة سكربتات مخصصة شائعة الاستخدام في package.json
// ============================================

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "type-check": "tsc --noEmit",
    "format": "prettier --write .",
    "preview": "npm run build && npm start"
  }
}

المخرجات:

TEXT 📖 للعرض فقط
npm run type-check   → تشغيل فحص أنواع TypeScript (لا يخرج ملفات)
npm run format       → تنسيق جميع الكود باستخدام Prettier
npm run preview      → بناء أولاً، ثم تشغيل خادم الإنتاج (بأمر واحد)

المخرجات:

TEXT 📖 للعرض فقط
npm run type-check   → تشغيل فحص أنواع TypeScript (لا يخرج ملفات)
npm run format       → تنسيق جميع الكود باستخدام Prettier
npm run preview      → بناء أولاً، ثم تشغيل خادم الإنتاج (بأمر واحد)


7. إضافات VS Code الموصى بها

(1) الإضافات الأساسية

اسم الإضافة الغرض عدد التثبيتات
Tailwind CSS IntelliSense إكمال تلقائي لأسماء فئات Tailwind + معاينة بالتمرير 10M+
ES7+ React/Redux/React-Native snippets مقتطفات JSX (rafce → قالب مكون) 8M+
Prettier - Code Formatter تنسيق تلقائي للكود 40M+
Error Lens رسائل خطأ مضمنة 5M+
GitLens تصور تاريخ Git 15M+


8. مثال شامل: بناء مشروع TaskFlow من الصفر

BASH
# ============================================
# مثال شامل: بناء مشروع Next.js 16 كامل من الصفر
# TaskFlow — منصة إدارة تعاون المشاريع
# ============================================

# 1. إنشاء مشروع
npx create-next-app@latest taskflow ^
  --typescript ^
  --eslint ^
  --tailwind ^
  --src-dir ^
  --app ^
  --import-alias "@/*"

# 2. الانتقال إلى دليل المشروع
cd taskflow

# 3. عرض هيكل الدليل
tree . /F | findstr /r "^.*src" > nul && dir /s /b src

# 4. تشغيل خادم التطوير
npm run dev

# 5. في طرفية أخرى، إضافة تخطيط VS Code الموصى به
mkdir .vscode
JSON
// .vscode/settings.json — تكوين على مستوى المشروع
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  },
  "typescript.preferences.importModuleSpecifier": "non-relative"
}
TSX
// src/app/page.tsx — تغيير الصفحة الرئيسية إلى صفحة ترحيب TaskFlow
import Link from "next/link";

export default function Home() {
  return (
    <div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100">
      <div className="container mx-auto px-4 py-16 text-center">
        <h1 className="text-5xl font-bold text-gray-900 mb-4">
          TaskFlow
        </h1>
        <p className="text-xl text-gray-600 mb-8 max-w-2xl mx-auto">
          منصة إدارة مشاريع تعاونية مبنية بـ Next.js 16.
          خطط وتتبع وسلّم المشاريع معًا.
        </p>
        <div className="flex gap-4 justify-center">
          <Link
            href="/login"
            className="px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700"
          >
            ابدأ الآن
          </Link>
          <Link
            href="/about"
            className="px-6 py-3 border border-gray-300 rounded-lg hover:bg-gray-50"
          >
            اعرف المزيد
          </Link>
        </div>
        <div className="mt-16 grid grid-cols-3 gap-8 max-w-3xl mx-auto">
          <div className="p-6 bg-white rounded-xl shadow-sm">
            <h3 className="font-bold text-lg">خطط</h3>
            <p className="text-gray-500 mt-2">أنشئ مشاريع وعيّن مهامًا</p>
          </div>
          <div className="p-6 bg-white rounded-xl shadow-sm">
            <h3 className="font-bold text-lg">تتبع</h3>
            <p className="text-gray-500 mt-2">راقب التقدم في الوقت الفعلي</p>
          </div>
          <div className="p-6 bg-white rounded-xl shadow-sm">
            <h3 className="font-bold text-lg">سلّم</h3>
            <p className="text-gray-500 mt-2">سلّم المشاريع في الموعد المحدد</p>
          </div>
        </div>
      </div>
    </div>
  );
}

المخرجات المتوقعة:

TEXT 📖 للعرض فقط
في المتصفح http://localhost:3000 ترى:

[عنوان TaskFlow]
منصة إدارة مشاريع تعاونية مبنية بـ Next.js 16.
خطط وتتبع وسلّم المشاريع معًا.

[ابدأ الآن] [اعرف المزيد]

┌──────┐  ┌──────┐  ┌──────┐
│ خطط  │  │ تتبع │  │ سلّم │
└──────┘  └──────┘  └──────┘

❓ أسئلة شائعة

س هل يجب أن يتضمن create-next-app معاملات مثل --ts --tailwind؟
ج لا، ليس ضروريًا. إذا لم تدرج أي معاملات، سيدخل في وضع الأسئلة والأجوبة التفاعلي ويسألك عن كل خيار واحدًا تلو الآخر. وضع المعاملات مناسب لأتمتة CI/CD. كلا الطريقتين تعطيان نفس النتائج.
س ما هي فوائد استخدام هيكل دليل src/؟ هل هو مطلوب؟
ج هيكل دليل src/ يفصل كود التطبيق (src/) عن ملفات التكوين (الدليل الجذري)، مما يجعل هيكل المشروع أكثر وضوحًا. ليس مطلوبًا، لكن هذا البرنامج التعليمي يوصي باستخدامه. يمكنك أيضًا اختيار عدم استخدامه، وفي هذه الحالة يوضع دليل app/ مباشرة في الدليل الجذري.
س لماذا لا يتم تحديث المتصفح تلقائيًا بعد تغيير الكود؟
ج تحقق مما إذا كنت تستخدم npm run dev (وضع التطوير). إذا كنت تستخدم npm start، فهذا هو خادم الإنتاج؛ ستحتاج إلى التبديل مرة أخرى إلى npm run build. أيضًا، Turbopack افتراضيًا يستخدم إعادة التحميل الساخن بدلاً من تحديث الصفحة بالكامل، لذا يجب أن تصبح التغييرات في الأنماط أو الوسوم سارية فورًا.
س هل يمكن تعطيل Turbopack؟
ج نعم. اضبط experimental.turbopack: false في next.config.ts للعودة إلى Webpack. ومع ذلك، توصي Next.js 16 رسميًا باستخدام Turbopack، وقد يتم إزالة دعم Webpack في الإصدارات المستقبلية.
س هل يجب إيداع .vscode/settings.json في Git؟
ج يُنصح بإيداعه. يحتوي على تكوينات تنسيق وجودة كود على مستوى المشروع، مما يضمن أن جميع أعضاء الفريق — بما في ذلك المطورين الجدد — يستخدمون إعدادات متسقة. ومع ذلك، .vscode/launch.json (تكوينات التصحيح) تختلف من شخص لآخر، لذا لا تحتاج إلى إيداعها.
س ماذا تعني البادئة ^ قبل رقم إصدار Next.js في package.json؟
ج ^16.2.0 تشير إلى أن npm install مسموح له بتثبيت أحدث إصدار ثانوي ضمن نطاق 16.x.x (مثل 16.3.0 و16.4.0)، لكنه لن يرقّي إلى 17.0.0. ~16.2.0 يسمح فقط بـ 16.2.x. لتثبيت الإصدار، استخدم 16.2.0 بدون البادئة.

📖 ملخص


📝 تمارين

  1. تمرين أساسي (⭐): استخدم create-next-app لإنشاء مشروع جديد باسم my-next-app (مع تفعيل TypeScript وTailwind وApp Router)، وشغّل خادم التطوير، وافتح localhost:3000 في المتصفح، والتقط لقطة شاشة للصفحة الرئيسية.

  2. تمرين متقدم (⭐⭐): كوّن remotePatterns في next.config.ts للسماح بتحميل الصور من images.unsplash.com، ثم استخدم مكون <Image> في app/page.tsx لتحميل صورة من Unsplash (عرض 800، ارتفاع 600).

  3. تحدٍّ (⭐⭐⭐): أنشئ صفحتين، app/about/page.tsx وapp/contact/page.tsx؛ وكوّن .vscode/settings.json للتنسيق التلقائي عند الحفظ؛ وشغّل npm run build لعرض رمزي وλ في المخرجات؛ وفسّر نوع كل مسار.

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%