返回博客
Astro内容集合

用 Astro 内容集合搭建可 Markdown 编辑的博客

本博依靠 Astro 的**内容集合(Content Collections)**实现:每一篇 .md 就是一篇文章,构建时自动变成独立的静态页面。

核心配置

集合定义在 src/content.config.ts,用 zod 声明文章的字段与类型:

import { defineCollection, z } from 'astro:content';

const blog = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    description: z.string().optional(),
    date: z.coerce.date(),
    tags: z.array(z.string()).optional(),
  }),
});

export const collections = { blog };

文章就是从文件来

只要在 src/content/blog/ 下新建一个 .md,顶部的 frontmatter 带上 titledate,正文写 Markdown,列表页和详情页就会自动出现它。

列表页与详情页

const posts = (await getCollection('blog')).sort(
  (a, b) => b.data.date.valueOf() - a.data.date.valueOf()
);

为什么不用后端

评论区、站点统计这类才需要联网能力;纯文章浏览在构建时就全部渲染成 HTML,部署后是纯静态站,快且省资源。这也是拆掉”从服务器拉取”这条路的根本原因。