Astro content collections nasıl çalışıyor
güncellendi gelişiyor
İki parça var: bir loader, bir şema. Loader dosyaları nereden okuyacağını söylüyor, şema içindeki frontmatter’ın neye benzemesi gerektiğini.
const blog = defineCollection({
loader: glob({ base: './src/content/blog', pattern: '**/*.md' }),
schema: z.object({
title: z.string(),
pubDate: z.coerce.date(),
}),
});
glob loader’ı Astro 5 ile geldi, ondan önceki type: 'content' yaklaşımının
yerini aldı. Fark şu: eskiden koleksiyonlar src/content/ altındaki klasör
adlarına bağlıydı, şimdi loader’ı sen veriyorsun ve içerik başka bir yerden,
hatta bir API’den de gelebiliyor.
z.coerce.date() kısmı önemli. YAML frontmatter’daki 2026-08-01 bir string
olarak geliyor, coerce onu Date’e çeviriyor. Düz z.date() yazarsan build
kırılıyor.
Emin olmadığım kısım
Şemadaki .max(160) gibi kısıtların hata mesajları build çıktısında hangi
dosyayı gösterdiğini henüz test etmedim. Dosya adını veriyorsa iyi, sadece
koleksiyon adını veriyorsa büyük koleksiyonlarda can sıkıcı olur.