这是一个基于 Astro Content Collections 的个人博客项目,支持:
- Markdown 内容管理
- 首页与分类归档分页(Articles / Moments)
- 文章详情页(含目录、代码块增强、图片增强)
- 动态卡片(仅列表展示,支持图文与标签)
- 站内搜索、主题切换、RSS、Sitemap、Robots
src/content/posts/*.md:博客文章内容与 Frontmattersrc/content/moments/*.md:动态内容与 Frontmatter(只在列表展示,没有详情页)src/content/pages/*.md:About/Bio 页面内容src/content.config.ts:内容 schema(文章、动态与页面字段)src/pages/index.astro:首页归档(第 1 页,文章与动态按日期混排)src/pages/page/[page].astro:首页归档分页src/pages/articles/**:Articles 分类归档与分页(全部文章)src/pages/moments/**:动态归档与分页src/pages/posts/[slug].astro:文章详情页src/pages/archive-data/[route].json.ts:归档筛选所需的按路由数据源src/pages/rss.xml.ts:RSS 订阅src/pages/sitemap.xml.ts:站点地图src/pages/robots.txt.ts:搜索引擎抓取规则src/components/*:页面组件(归档、文章卡片、动态卡片、顶部操作、侧栏、页脚等)src/layouts/ContentInfoPageLayout.astro:About/Bio 共享布局src/utils/archive.ts:归档卡片、分页/SEO/路由辅助函数src/utils/posts.ts:文章集合与搜索数据构建工具src/utils/moments.ts:动态集合、排序与日期格式化工具src/utils/content-pages.ts:About/Bio 数据构建工具src/styles/article-prose-base.css:文章正文共享排版样式astro.config.mjs:Astro 配置(支持site与base)
npm install --cache .npm-cache --ignore-scripts
npm run dev默认开发地址通常是:http://localhost:4321
npm run build构建产物输出到:dist/
项目支持通过环境变量适配不同部署前缀:
SITE_URL:站点完整地址(例如https://example.com)BASE_PATH:部署基础路径- 根路径部署:
/ - 子路径部署:
/<your-path>/
- 根路径部署:
BASE_PATH 会影响内部链接、分页路由、RSS/Sitemap 等 URL 生成,请确保与部署平台配置一致。
文章页支持可复用的图文混排类(定义于 src/pages/posts/[slug].astro):
post-media post-media--float post-media--float-right:文首右浮小图post-media post-media--float post-media--float-left:左浮小图(少量使用)post-media-clear:清除浮动post-media post-media--center-narrow:段间窄幅居中图post-media-pair post-media-pair--left:左图右文并排,桌面端底部齐平post-media-pair__text:并排布局中的右侧文字容器post-media-pair--balanced:放大左图并拉大间距,使右侧文字与图片上下对齐
可参考模板 templates/new-post-template.md。
如果后续 agent 需要按同一规则排版,请使用项目内 skill:skills/post-image-layout/SKILL.md。
动态用于记录短句与照片,只在列表中出现,不生成可点击进入的详情页。它们会出现在首页 All 时间线中,也可以从 Moments 归档单独查看;归档导航保留 All、Moments、Articles,文章卡片带标题、动态卡片不带标题,以此区分。分类页与搜索、RSS 仍只包含文章。
在 src/content/moments/ 下新建 .md 文件,Frontmatter 字段如下:
text(必填):几句话的文字,换行会保留date(必填):发布日期,用于排序,例如2026-11-01images(可选):图片数组,每项为{ src, alt };src放在public/images/下tags(可选):标签数组,会出现在侧栏筛选与卡片底部listDate(可选):列表日期文案;不填则自动生成Nov 1, 2026格式draft(可选):true时不展示
图片排版会根据图片数量自动选择:
- 0 张:纯文字卡片
- 1 张:16:10 宽幅
- 2 张或 4 张:两列
- 3 张及以上(非 4 张):三列方格,手机上保持三列缩略图
可参考模板 templates/new-moment-template.md。