用 Content Collections 讓錯的文章連建置都過不了
用 Markdown 寫部落格最常見的問題不是「寫不出來」,而是 frontmatter 打錯字之後
——date 寫成 data、日期少了一位數——網站照樣建置成功,只是那篇文章排到了 1970 年。
Astro 的 Content Collections 用 schema 把這件事擋在建置階段:
const blog = defineCollection({
loader: glob({ base: './src/content/blog', pattern: '**/*.md' }),
schema: z.object({
title: z.string(),
date: z.coerce.date(),
excerpt: z.string().optional(),
}),
});
少了 title 或 date,astro build 直接失敗,而且訊息會指出是哪一個檔案的哪一個欄位。
為什麼用 z.coerce.date()
YAML 的 2026-07-02 會被解析成 Date,但如果作者寫成 "2026-07-02"(帶引號)就是字串。
z.coerce.date() 兩種都吃,進到程式一律是 Date 物件——排序時就不會踩到「字串比較」的坑。
Comments