السيرفر · فصل ١١

ثابت ولا سيرفر؟

output static · output server · prerender · adapters
🎯 الهدف: تختار وضع البناء، وتعلّم صفحة واحدة تطلع عن القطيع، وتركّب adapter للاستضافة.

الوضع الافتراضي: كله يتبنى

من غير أي إعداد، output هو static. كل صفحة و endpoint بيتولّدوا HTML أو ملف وقت astro build، و dist/ يتنرفع على أي استضافة ملفات. مفيش سيرفر Node شغال بعد كده. ده وضع مدونة وموقع الشركة والمذكرة دي.

static

كل الصفحات جاهزة. صفحة تطلع عن القطيع بـ export const prerender = false، وساعتها محتاج adapter عشان الصفحة دي تتشغّل على السيرفر.

server

كل الصفحات عند الطلب. صفحة تقدر تتبنى مسبقًا بـ export const prerender = true. مناسب لو أكتر الموقع شخصي أو لوجن.

الوضع القديم hybrid اتشال من Astro 5. متدورش عليه في كونفج جديد. الاستثناء صفحة بصفحة عن طريق prerender.

src/pages/account.astro
---export const prerender = false;const name = Astro.cookies.get("name")?.value ?? "يا زائر";---<p>أهلًا {name}</p>
صفحة فيها كوكي أو ترويسة أو بيانات الزائر مش تتبنى مع الباقي.

الـ adapter

الـ adapter بيترجم صفحات “عند الطلب” لشكل الاستضافة: دالة على Netlify أو Vercel، أو سيرفر Node، أو Worker على Cloudflare.

terminal
pnpm astro add node

الأمر بيكتب adapter في الكونفج. في غيره @astrojs/vercel و @astrojs/netlify و @astrojs/cloudflare. اختار اللي هتنشر عليه، مش التلاتة.

من غير adapter، prerender = false أو output: "server" هيفشل البناء. الصفحات الثابتة الخالصة مش محتاجاه.

إيه اللي بيتساب ثابت

خلّي ثابت كل اللي مش بيتغير بين الزوار: المنيو، المقال، صفحة الهبوط، السايت ماب. سيّب عند الطلب: حسابي، بحث فيه صلاحيات، فورم بيكتب في قاعدة، أي حاجة بتقرأ كوكي.

خلط الاتنين هو العادي في المشاريع الكبيرة مش تنازل. صفحة المقال ثابتة، وصندوق “طلباتي” جزيرة سيرفر أو صفحة prerender = false.

dev و preview والإنتاج

astro dev للتعديل السريع. من Astro 6 سيرفر التطوير بقى أقرب لتشغيل الإنتاج على runtimes مش Node، عشان مفاجأة “شغالة عندي” تقل. برضه: build ثم preview ثم النشر.

Astro.request و Astro.cookies و Astro.clientAddress ليهم معنى وقت الطلب. على صفحة ثابتة مفيش زائر وقت البناء، فمتقراش كوكي هناك وتفتكر إنه كوكي الزائر.

الاستضافة الثابتة (ملفات بس) مش هتشغّل صفحة سيرفر حتى لو البناء نجح عندك بـ adapter تاني. الـ adapter والاستضافة زوج.

خلّصت الفصل لما

🧠 اختبر نفسك
١) الوضع الافتراضي من غير output في الكونفج؟
static. كله يتبنى لملفات.
٢) وضع hybrid في Astro 7 لسه موجود؟
لأ. الاستثناء صفحة بصفحة بـ prerender.
٣) مشروع ثابت كله، محتاج adapter؟
لأ، إلا لو فيه مسار prerender = false.