الوضع الافتراضي: كله يتبنى
من غير أي إعداد، output هو static. كل صفحة و endpoint بيتولّدوا HTML أو ملف وقت astro build، و dist/ يتنرفع على أي استضافة ملفات. مفيش سيرفر Node شغال بعد كده. ده وضع مدونة وموقع الشركة والمذكرة دي.
كل الصفحات جاهزة. صفحة تطلع عن القطيع بـ export const prerender = false، وساعتها محتاج adapter عشان الصفحة دي تتشغّل على السيرفر.
كل الصفحات عند الطلب. صفحة تقدر تتبنى مسبقًا بـ export const prerender = true. مناسب لو أكتر الموقع شخصي أو لوجن.
الوضع القديم hybrid اتشال من Astro 5. متدورش عليه في كونفج جديد. الاستثناء صفحة بصفحة عن طريق prerender.
---export const prerender = false;const name = Astro.cookies.get("name")?.value ?? "يا زائر";---<p>أهلًا {name}</p>الـ adapter
الـ adapter بيترجم صفحات “عند الطلب” لشكل الاستضافة: دالة على Netlify أو Vercel، أو سيرفر Node، أو Worker على Cloudflare.
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.