آسترو ۷.۱ با کنترل بیشتر روی خروجی
خلاصهٔ کاملتر
آسترو ۷.۱ منتشر شد و به گفتهٔ تیم اصلی، موضوع این نسخه یه چیزه: کنترل بیشتر. مجموعهٔ تغییرها هم دقیقاً همین رو نشون میده — از اجرای همزمان چند سرور توسعه و شکلدهی به آدرسهای صفحهبندی گرفته تا سیاستهای امنیتی دقیقتر و مصرف حافظهٔ کمتر. برای ارتقا هم میشه از ابزار خودکار @astrojs/upgrade استفاده کرد.
تو بخش امنیت، پشتیبانی داخلی از چهار دایرکتیو تازهٔ CSP اضافه شده: script-src-elem، script-src-attr، style-src-elem و style-src-attr. اینها نسخههای تخصصیتر script-src و style-src هستن و به گفتهٔ تیم آسترو مشکلاتی رو حل میکنن که قبلاً راهحلی نداشتن؛ مثلاً حالا میشه استایلهای اینلاین رو بهعنوان ناامن پذیرفت بدون اینکه امنیت فایلهای CSS خارجی فدا بشه.
صفحهبندی هم یه مشکل قدیمی داشت: آدرسهایی که paginate() تولید میکرد همیشه با شکل واقعی دیپلوی سایت جور درنمیاومد. اگه خروجی فایل ساکن .html میگرفتی و روی هاستی بدون قواعد بازنویسی آدرس دیپلوی میکردی، لینکهای next و prev مسیرهای تمیزی مثل /blog/2 بودن که هیچ فایلی روی دیسک باهاشون مطابقت نداشت. حالا تابع تازهٔ format هر آدرس تولیدشده رو بهشکل رشته بهت میده تا هرطور خواستی تغییرش بدی، مثلاً پسوند .html بهش اضافه کنی.
یه اصلاح جالب هم به یه عارضهٔ جانبی نسخهٔ ۷ برمیگرده. آسترو ۷ یه فایل قفل معرفی کرده بود تا ایجنتهای کدنویسی هوش مصنوعی تصادفاً چند سرور توسعهٔ تکراری برای یه پروژه بالا نیارن، ولی نتیجهاش این شد که خودِ توسعهدهنده هم اگه عمداً astro dev دوم رو اجرا میکرد با خطا مواجه میشد. نسخهٔ ۷.۱ فلگ --ignore-lock رو اضافه کرده که بررسی فایل قفل رو رد میکنه.
البته اینستنسی که با این فلگ بالا میاد مستقل از بقیه کار میکنه، یعنی دستورهای astro dev stop، astro dev status و astro dev logs ازش خبر ندارن. تیم آسترو تأکید میکنه این قابلیت برای همون سناریوهای موقتیه — مثلاً وقتی میخوای یه اینستنس دوم با لاگ پرجزئیات بالا بیاری و سرور اصلی و وضعیتش رو دستنخورده نگه داری — نه برای سروری که قراره بلندمدت مدیریتش کنی.
برای سایتهای محتوامحور بزرگ هم یه گزینهٔ مصرف حافظه اضافه شده. لودر glob() بهطور پیشفرض ورودیهای مارکداون رو همون موقع سینک رندر میکنه و HTML خروجی رو کش میکنه تا بیلدهای بعدی سریع باشن؛ معاملهٔ خوبیه، ولی هرچی کالکشن بزرگتر میشه گرونتر تموم میشه. حالا با deferRender: true میشه یه کالکشن رو از رندر زودهنگام معاف کرد تا رندر به وقت نیاز موکول بشه — همون رفتاری که فایلهای .mdx همیشه داشتن.
دو تغییر دیگه هم هست: لاگرهای سفارشی حالا مثل بقیهٔ APIها با پاس دادن یه URL پیکربندی میشن که اجازه میده تنظیمات رو موقع اجرا بازنویسی کنی یا از قابلیتهای خود Vite استفاده کنی، و تایپ AstroRuntimeLogger هم برای فایلهایی که با لاگر رانتایم کار میکنن اضافه شده.
دست آخر یه فلگ آزمایشی به اسم experimental.collectionStorage معرفی شده. تاریخاً کالکشنهای محتوا دادههاشون رو تو یه فایل واحد به اسم .astro/data-store.json ذخیره میکردن که برای پروژههای بزرگ روی پلتفرمهایی با محدودیت اندازهٔ فایل دردسرساز بود. با انتخاب حالت chunked، آسترو دادهها رو هر ۱۰ مگابایت به فایلهای جدا تقسیم میکنه.
نکات کلیدی:
- فلگ --ignore-lock برای اجرای همزمان چند سرور توسعه روی یه پروژه
- تابع format تو paginate() برای کنترل کامل آدرسهای صفحهبندی
- چهار دایرکتیو تازهٔ CSP برای اسکریپت و استایل اینلاین
- گزینهٔ deferRender برای کاهش مصرف حافظه تو کالکشنهای بزرگ
- فلگ آزمایشی collectionStorage برای تکهتکه کردن دادهٔ کالکشنها هر ۱۰ مگابایت
- پیکربندی یکدستتر لاگر سفارشی و تایپ تازهٔ AstroRuntimeLogger




