الدليل الشامل لتعلم Next.js للمبتدئين
- ما هو Next.js
- مميزات Next.js
- تثبيت أدوات Next.js
- إنشاء و تشغيل مشروع Next.js
- هيكلة المشروع في Next.js
- التوجيه في Next.js
- التصيير في Next.js
- جلب البيانات في Next.js
- تحسين SEO في Next.js
- نشر تطبيق Next.js على الإنترنت
- ما الخطوة التالية؟
ما هو Next.js
في عالم تطوير الويب، يُعد Next.js أحد أقوى أطر العمل التي يمكن استخدامها لإنشاء تطبيقات الويب الحديثة فهو يتميز بسهولة استخدامه و دعمه لتحسين الظهور في محركات البحث ( SEO ).
في هذا المقال سنغطي أهم المواضيع الأساسية في Next.js بدءاً من تثبيته و تشغيله، و حتى نشر التطبيق على الإنترنت.
مميزات Next.js
Next.js هو إطار عمل مبني على React و لكنه يضيف عليها ميزات قوية مثل:
- التصيير من جهة الخادم ( SSR ) – تحميل المحتوى ديناميكياً مع تحسين أداء محركات البحث.
- التصيير عند البناء ( SSG ) – إنشاء صفحات ثابتة مسبقاً لزيادة سرعة التحميل.
- التحديث التدريجي ( ISR ) – تحديث البيانات جزئياً دون الحاجة إلى إعادة بناء التطبيق.
- التنقل السهل ( Routing ) – التنقل بين الصفحات لا يحتاج أي إعدادات فهو قائم على أسلوب ترتيب الملفات.
- دعم API Routes – يمكنك إنشاء خوادم API داخل التطبيق نفسه.
تثبيت أدوات Next.js
لتتمكن من إنشاء و تشغيل مشاريع Next.js تحتاج إلى تثبيت خادم Node.js على جهازك فهو يتضمن كل الأدوات التي تحتاجها لذلك.
شاهد هذا الدرس في حال أردت معرفة كيفية تحميل و تثبيت Node.js خطوة خطوة.
إنشاء و تشغيل مشروع Next.js
بعدما تأكدت أن جهازك عليه Node.js قم بتنفيذ الأوامر التالية تباعاً:
1- الأمر التالي ينشئ مشروع جديد إسمه my-next-app
.
مثال
npx create-next-app@latest my-next-app
2- الأمر التالي يقوم بالإنتقال إلى المشروع my-next-app
.
مثال
cd my-next-app
3- الأمر التالي يقوم بتشغيل المشروع my-next-app
و من ثم يفتحه في المتصفح.
مثال
npm run dev
إفتراضياً، سيتم تشغيل المشروع في المتصفح في الرابط http://localhost:3000
إذا كان متاحاً.
هيكلة المشروع في Next.js
ملفات المشروع في Next.js تكون مرتبة على النحو التالي:
- المجلد
/pages
_ يحتوي على الصفحات، مثلindex.js
وabout.js
. - المجلد
/public
_ تخزين الصور والملفات العامة. - المجلد
/styles
_ ملفات CSS. - المجلد
/components
_ مكونات React القابلة لإعادة الاستخدام - المجلد
/api
_ مسارات API داخل Next.js.
فيما يلي، مخطط توضيحي لهيكلة المشروع في Next.js.
my-next-app/ ├── node_modules/ │── pages/ │ │── index.js │ └── api/ │── components/ │── public/ │── styles/ └── package.json
التوجيه في Next.js
يستخدم Next.js نظام توجيه قائم على الملفات، أي أن أي ملف داخل pages/
يصبح تلقائياً مساراً.
كمثال على إنشاء صفحة جديدة، أضف ملف إسمه about.js
داخل pages/
و اكتب الكود التالي.
مثال
export default function About() { return <h1>About Page</h1>; }
يمكنك زيارة هذه الصفحة من خلال الرابط http://localhost:3000/about
المسارات الديناميكية ( Dynamic Routing )
لإنشاء صفحات ديناميكية، أضف ملف إسمه [id].js
داخل المسار pages/blog/
و أضف فيه الكود التالي.
مثال
import { useRouter } from 'next/router'; export default function BlogPost() { const router = useRouter(); const { id } = router.query; return <h1>Blog Post ID: {id}</h1>; }
إذا قمت بزيارة الرابط http://localhost:3000/blog/123
سيظهر لك صفحة فيها العنوان التالي.
Blog Post ID: 123
التصيير في Next.js
فيما يلي سنتطرق لثلاث أنواع من التصيير.
1- التصيير عند البناء
التصيير عند البناء ( Static Generation - SSG ) مناسب للصفحات الثابتة حيث يتم إنشاؤها مرة واحدة أثناء بناء التطبيق.
مثال
export async function getStaticProps() { return { props: { message: "Hello from Static Generation" }, }; } export default function Home({ message }) { return <h1>{message}</h1>; }
2- التصيير من جهة الخادم
التصيير من جهة الخادم ( Server-Side Rendering - SSR ) يقصد به أنه يتم جلب البيانات كاملةً في كل مرة يطلب فيها المستخدم الصفحة.
مثال
export async function getServerSideProps() { return { props: { time: new Date().toLocaleTimeString() }, }; } export default function ServerTime({ time }) { return <h1>Current Time: {time}</h1>; }
3- التصيير التدريجي
التصيير التدريجي أو المتوالي ( Incremental Static Regeneration - ISR ) يسمح بتحديث الصفحات بشكل دوري دون إعادة بناء التطبيق بالكامل.
مثال
export async function getStaticProps() { return { props: { time: new Date().toLocaleTimeString() }, revalidate: 10, // يتم تحديث البيانات كل 10 ثوانٍ }; }
جلب البيانات في Next.js
لجلب البيانات، يمكنك بناء API داخلي على النحو التالي:
1- أنشئ ملف API في هذا المسار pages/api/products.js
و أضف فيه الكود التالي.
مثال
export default function handler(req, res) { res.status(200).json([ {id: 1, name: "Laptop"}, {id: 2, name: "Phone"} ]); }
2- الآن يمكنك جلب البيانات من products.js
على النحو التالي.
مثال
export async function getServerSideProps() { const res = await fetch("http://localhost:3000/api/products"); const data = await res.json(); return { props: { products: data } }; } export default function Products({ products }) { return ( <ul> {products.map((p) => (<li key={p.id}>{p.name}</li>))} </ul> ); }
تحسين SEO في Next.js
لتحسين ظهور الموقع في محركات البحث استخدم next/head
لإضافة وسوم <meta>
على النحو التالي.
مثال
import Head from "next/head"; export default function Home() { return ( <> <Head> <title>Next.js SEO Example</title> <meta name="description" content="This is a Next.js SEO example" /> </Head> <h1>Welcome to Next.js!</h1> </> ); }
نشر تطبيق Next.js على الإنترنت
فيما يلي ستتعرف على طريقة نشر التطبيق المبني بواسطة Next.js لدى شركة الإستضافة Vercel و لدى أي شركة إستضافة أخرى.
Vercel هي الحل الأسرع و الأسهل لنشر تطبيقات Next.js.
نشر التطبيق على Vercel
1- قم بتنفيذ الأمر التالي لتثبيت أداة Vercel CLI
.
مثال
npm install -g vercel
2- قم بتنفيذ الأمر التالي و أنت بداخل مجلد المشروع حتى تسجل دخولك إلى Vercel.
مثال
vercel login
3- قم بتنفيذ الأمر التالي لنشر التطبيق على Vercel.
مثال
vercel
سيتم نشر موقعك على نطاق Vercel مباشرةً.
نشر التطبيق على سيرفر VPS
1- قم بتنفيذ الأمر التالي لبناء نسخة من التطبيق يمكن تشغيلها على سيرفر.
مثال
npm run build
2- قم برفع النسخة التي تم إنشاءها إلى السيرفر و الذي يفترض أن تكون هيئته مسبقاً و ثبّت عليه Node.js.
3- على السيرفر الذي رفعت عليه النسخة، قم بتنفيذ الأمر التالي لكي تشغل التطبيق.
مثال
npm start
ما الخطوة التالية؟
في هذا الدليل، تعلمنا كل شيء عن Node.js، بدءاً من التثبيت، مروراً بالتوجيه، التصيير جلب البيانات، تحسينSEO، و حتى نشر التطبيق.
- استكشاف Next.js Middleware
- التكامل مع GraphQL و Redux
- إنشاء تطبيقات متقدمة باستخدام NextAuth.js