用途:在 Astro 中创建或重构结构化内容时使用本技能,例如博客、文档、更新日志、案例研究、团队数据等由 Schema 驱动的内容。若项目中同时可用 astro-best-practices,可配合使用以获得命名、无障碍与性能方面的默认规范。
主要能力与用法:首先判断集合是构建时还是实时,多数内容站点应使用构建时集合(src/content.config.),仅当数据确需请求时新鲜度时才用实时集合(src/live.config.)。定义集合时使用当前 Content Layer API,在 src/content.config.ts(或 .js/.mjs)中为每个集合提供 loader,使用 import z from astro/zod,不再使用 type: 'content' 或 type: 'data'。常用模式包括 glob() 处理本地文件夹条目、file() 处理单个数据文件、z.enum() 限定取值、z.coerce.date() 处理日期、reference('collection-name') 建立关联,以及 schema: ({ image }) => ... 进行图片校验。
保持集合形态最新:Astro 6 及更新版本使用 src/content.config.*,用 entry.id 作为 URL 与查询中的标识,仅在确需源路径时用 entry.filePath,用 getEntry() 取代旧的 getEntryBySlug() 与 getDataEntryById()。查询时按意图选择 API:getCollection() 取列表、getEntry() 取单个、getEntries() 取引用数组,并可用过滤条件区分草稿与已发布内容。
路由与渲染:动态路由从集合 ID 构建路径,将条目通过 props 传入,使用 render(entry) 渲染内容。修改集合后运行 npx astro sync 或项目常规 Astro 工作流,修复 Schema 不匹配而非削弱类型,并至少校验每个集合的一个真实条目,留意缺少 loader、旧配置路径或废弃导入的警告。迁移旧模式时,把 src/content/config.ts 移至 src/content.config.ts,为每个集合添加 loader,移除 type 字段,改用 astro/zod 导入 z,用 post.id 替代 post.slug,用 render(entry) 替代 entry.render(),用 getEntry() 替代旧查询方法;若同时跨版本升级,应先查阅当前官方 Astro 文档确认版本敏感的 API。
适用场景:博客、文档、更新日志、案例研究、团队数据等结构化内容。限制:具体版本兼容性以官方文档为准,资料未提供更多平台或收费信息。