Next.js: إعداد البيئة وهيكل المشروع
آخر تحديث: 2026-08-26
إعداد بيئة تطوير Next.js 16 يشبه تجديد منزل جديد — السقالات تساعدك في وضع الأساس، وباقي الهيكل والتخطيط والتكوين يمكن تعديلها جميعًا حسب الحاجة.
1. ما ستتعلمه
- إنشاء مشروع باستخدام سقالات
create-next-app - فهم الأدلة والملفات الأساسية مثل
app/وpublic/وnext.config.jsوغيرها - تشغيل خادم التطوير وتجربة التحديثات الساخنة الفورية من Turbopack
- تحليل السكربتات الرئيسية في
package.json - تكوين إضافات التطوير الموصى بها لـ VS Code
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التفاعلية لتوليد هيكل مشروع بأفضل الممارسات بنقرة واحدة.
# أمر تفاعلي، فقط أجب عن بعض الأسئلة البسيطة
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) الإنشاء التفاعلي
# تشغيل أمر السقالات
npx create-next-app@latest
سترى الخيارات التفاعلية التالية:
? 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) التكوين الموصى به (المستخدم في هذا البرنامج التعليمي)
# الخيارات الموصى بها لهذا البرنامج التعليمي (جميع المشاريع تستخدم هذه المجموعة)
npx create-next-app@latest taskflow ^
--typescript ^
--eslint ^
--tailwind ^
--src-dir ^
--app ^
--import-alias "@/*"
| الخيار | القيمة | السبب |
|---|---|---|
| TypeScript | نعم | معيار للمشاريع على مستوى الإنتاج، أمان الأنواع |
| ESLint | نعم | ضمان جودة الكود |
| Tailwind CSS | نعم | مستخدم في جميع أنحاء هذا البرنامج التعليمي |
| دليل src/ | نعم | فصل الكود عن التكوين |
| App Router | نعم | نظام التوجيه الافتراضي في Next.js 16 |
| اسم مستعار للاستيراد | @/* | مسار استيراد مختصر |
▶ مثال: العملية الكاملة لإنشاء السقالات
# ============================================
# إنشاء مشروع جديد باسم shophub
# ============================================
npx create-next-app@latest shophub --ts --tailwind --app --src-dir
# مخرجات الطرفية
cd shophub
npm run dev
المخرجات:
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) هيكل المشروع الذي تولده السقالات
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 الافتراضي
المخرجات:
Diagram: shophub/; src/; public/; ملفات تكوين أخرى; app/; app/globals.css.
// ============================================
// 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>
);
}
المخرجات:
يعرض: مكون Home مع عناصر واجهة المستخدم الموصوفة.
المخرجات:
افتح في المتصفح http://localhost:3000، كما ترى:
- شعار Next.js الرسمي
- عرض "Get started by editing src/app/page.tsx"
- رابطا "Deploy now" و"Read our docs"
- استجابة للوضع الداكن/الفاتح
(2) public/ — دليل الموارد الثابتة
public/
├── favicon.ico # أيقونة علامة تبويب المتصفح
├── file.svg # أيقونة نوع الملف
├── globe.svg # أيقونة الكرة الأرضية
├── next.svg # شعار Next.js
├── vercel.svg # شعار Vercel
└── window.svg # أيقونة النافذة
جميع الملفات الموجودة تحت public/ يمكن الوصول إليها مباشرة عبر المسار الجذري /:
// الإشارة إلى الصور في دليل 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
المخرجات:
TypeScript compiled.
// ============================================
// 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;
المخرجات:
المكون يعرض واجهة المستخدم الخاصة به.
المخرجات:
بعد تفعيل التكوين:
1. مكونات <Image> يمكنها تحميل الصور من fakestoreapi.com وimages.unsplash.com
2. المحتوى بعد حدود Suspense في الصفحة سيستخدم عرض PPR المتدفق
3. أعد تشغيل npm run dev ليصبح التكوين ساريًا
5. خوادم التطوير وTurbopack
(1) تشغيل خادم التطوير
# الانتقال إلى دليل المشروع
cd shophub
# تشغيل خادم التطوير
npm run dev
▶ مثال: تجربة إعادة التحميل الساخن المباشر مع Turbopack
المخرجات:
▲ Next.js 16.0.0
- Local: http://localhost:3000
- Environments: .env.local
✓ Starting...
✓ Ready in 1.2s
# ============================================
# تشغيل خادم التطوير، ملاحظة سرعة 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 لتغيير أي نص، ثم احفظ:
✔ Updated /src/app/page.tsx in 4ms ← 4 ميلي ثانية! تحديثات شبه فورية
المخرجات:
▲ 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 بناء الإنتاج
# بناء نسخة الإنتاج
npm run build
المخرجات:
✓ 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" يعرض نوع المسار
المخرجات:
(انظر المخرجات أعلاه)
# ============================================
# تفسير مخرجات بناء الإنتاج
# ============================================
# لنفترض أنه تم إنشاء صفحتين:
# app/about/page.tsx وapp/dashboard/page.tsx
# من بينها dashboard تستخدم دوال ديناميكية cookies()
npm run build
# معنى الرموز في المخرجات:
○ / # صفحة ثابتة (لا دوال ديناميكية)
○ /about # صفحة ثابتة
λ /dashboard # صفحة ديناميكية (استخدمت API ديناميكي)
○ /_not-found # صفحة 404
المخرجات:
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
المخرجات:
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 خادم الإنتاج
# تشغيل خادم الإنتاج بعد النشر
npm run build
npm start
npm start يجب تشغيله بعد npm run build؛ فهو يشغل نسخة الإنتاج المحسنة، وليس نسخة التطوير.
6. فهم السكربتات في package.json
(1) قائمة السكربتات الافتراضية
{
"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 |
فحص نمط الكود |
▶ مثال: إضافة سكربت مخصص
المخرجات:
JSON structure with scripts (dev, build, start, lint, type-check, format, preview) and their corresponding CLI commands.
// ============================================
// إضافة سكربتات مخصصة شائعة الاستخدام في 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"
}
}
المخرجات:
npm run type-check → تشغيل فحص أنواع TypeScript (لا يخرج ملفات)
npm run format → تنسيق جميع الكود باستخدام Prettier
npm run preview → بناء أولاً، ثم تشغيل خادم الإنتاج (بأمر واحد)
المخرجات:
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 من الصفر
# ============================================
# مثال شامل: بناء مشروع 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
// .vscode/settings.json — تكوين على مستوى المشروع
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"typescript.preferences.importModuleSpecifier": "non-relative"
}
// 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>
);
}
المخرجات المتوقعة:
في المتصفح http://localhost:3000 ترى:
[عنوان TaskFlow]
منصة إدارة مشاريع تعاونية مبنية بـ Next.js 16.
خطط وتتبع وسلّم المشاريع معًا.
[ابدأ الآن] [اعرف المزيد]
┌──────┐ ┌──────┐ ┌──────┐
│ خطط │ │ تتبع │ │ سلّم │
└──────┘ └──────┘ └──────┘
❓ أسئلة شائعة
create-next-app معاملات مثل --ts --tailwind؟src/؟ هل هو مطلوب؟src/ يفصل كود التطبيق (src/) عن ملفات التكوين (الدليل الجذري)، مما يجعل هيكل المشروع أكثر وضوحًا. ليس مطلوبًا، لكن هذا البرنامج التعليمي يوصي باستخدامه. يمكنك أيضًا اختيار عدم استخدامه، وفي هذه الحالة يوضع دليل app/ مباشرة في الدليل الجذري.npm run dev (وضع التطوير). إذا كنت تستخدم npm start، فهذا هو خادم الإنتاج؛ ستحتاج إلى التبديل مرة أخرى إلى npm run build. أيضًا، 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 بدون البادئة.📖 ملخص
create-next-appهي أداة السقالات الرسمية؛ يمكنك إنشاء مشروع بأفضل الممارسات بأمر واحد- الإعداد الموصى به: TypeScript + ESLint + Tailwind + App Router + دليل src/
src/app/يخزن صفحات المسارات؛public/يخزن الموارد الثابتةnext.config.tsهو ملف التكوين الأساسي (نطاق الصور، تبديل PPR، إلخ)npm run devباستخدام Turbopack لإعادة التحميل الساخن أسرع بـ 10 إلى 50 مرة من Webpacknpm run build+npm startهي عملية إعداد وتشغيل بيئة الإنتاج- إضافات VS Code الموصى بها: Tailwind CSS IntelliSense وES7+ React snippets وPrettier
npm run devللتطوير فقط؛npm startيجب البناء قبل الاستخدام
📝 تمارين
-
تمرين أساسي (⭐): استخدم
create-next-appلإنشاء مشروع جديد باسمmy-next-app(مع تفعيل TypeScript وTailwind وApp Router)، وشغّل خادم التطوير، وافتحlocalhost:3000في المتصفح، والتقط لقطة شاشة للصفحة الرئيسية. -
تمرين متقدم (⭐⭐): كوّن
remotePatternsفيnext.config.tsللسماح بتحميل الصور منimages.unsplash.com، ثم استخدم مكون<Image>فيapp/page.tsxلتحميل صورة من Unsplash (عرض 800، ارتفاع 600). -
تحدٍّ (⭐⭐⭐): أنشئ صفحتين،
app/about/page.tsxوapp/contact/page.tsx؛ وكوّن.vscode/settings.jsonللتنسيق التلقائي عند الحفظ؛ وشغّلnpm run buildلعرض رمزي○وλفي المخرجات؛ وفسّر نوع كل مسار.