Tip
当前版本为破坏性更新,全程使用deepseek harness搭建
一个基于 Astro 7 + TypeScript 7 + UnoCSS 66 的个人博客主题,支持博客列表分页、系列教程、标签系统、时间归档、全站搜索、RSS / sitemap / robots、深浅色主题等完整功能。
- 📝 博客系统:Markdown / MDX 写作,列表分页(
/blog、/blog/2…),支持子目录 slug(如/blog/atcoder/abc424) - 📚 系列教程:按子目录分组系列,系列内文章目录 + 上一篇 / 下一篇导航
- 🏷️ 标签系统:标签云 + 按标签分页的文章列表
- 🗂️ 时间归档:按年 / 月分组的时间线归档
- 🔍 站内搜索:构建期注入全文索引,纯前端实时过滤,无需后端
- 🌓 深浅色主题:
dark:类驱动,跟随系统偏好 + 手动切换(localStorage 记忆) - 🔗 友链 / 项目 / 关于:由
public/links.json驱动的友链页等辅助页面 - 🔔 SEO:canonical、Open Graph、Twitter Card、JSON-LD(BlogPosting)、sitemap、robots.txt
- 📡 RSS:
/rss.xml订阅(最新 20 篇) - 💬 评论系统:集成 Twikoo,支持文章和系列教程页面评论(需配置环境变量)
- 🎨 Mermaid 流程图:
```mermaid代码块构建期渲染为矢量图,支持深浅色(rehype-mermaid) - 🧮 KaTeX 数学公式:行内
$...$与块级$$...$$公式渲染(remark-math+rehype-katex) - 📋 代码一键复制:所有代码块右上角带「复制」按钮,点击复制纯文本(原生剪贴板 API)
# 安装依赖(建议使用 bun)
bun install
# 本地开发:http://localhost:4321
bun run dev
# 类型检查
bunx tsc --noEmit
# 生产构建(输出 dist/)
bun run build
# 预览构建产物
bun run preview使用 npm / pnpm 亦可:
npm install/npm run dev。
astro-theme-sify/
├── astro.config.ts # Astro 配置(UnoCSS、sitemap、shiki)
├── uno.config.ts # UnoCSS 配置(主题色、shortcuts)
├── tsconfig.json
├── package.json
├── public/
│ ├── favicon/ # 站点图标
│ ├── images/ # 头像 / 封面 / OG 占位图
│ ├── links.json # 友链数据
│ └── site.webmanifest
├── src/
│ ├── assets/styles/global.css # 全局样式(重置、排版、滚动条)
│ ├── components/ # 通用组件(Header/Footer/PostCard/Pagination…)
│ ├── content/
│ │ ├── blog/ # 博客文章(支持子目录)
│ │ └── series/ # 系列文章(按系列分子目录)
│ ├── content.config.ts # 内容集合 schema(zod 校验)
│ ├── layouts/ # BaseLayout / BlogPost / SeriesPost
│ ├── pages/ # 路由页面(详见下方路由表)
│ ├── plugins/ # Astro 插件(预留)
│ ├── site.config.ts # 站点配置(标题/导航/社交/页脚)
│ └── type.d.ts # 全局类型声明
└── scripts-web/ # 辅助脚本(预留)
| 路径 | 说明 |
|---|---|
/ |
首页 |
/blog、/blog/2… |
博客列表(每页 10 篇) |
/blog/<slug> |
文章详情(slug 支持子目录,如 atcoder/abc424) |
/series |
系列列表 |
/series/<slug> |
系列介绍 + 目录 |
/series/<slug>/<order> |
系列内文章(按 order 排序) |
/tags |
标签云 |
/tags/<tag>、/tags/<tag>/2… |
标签文章列表(分页) |
/archives |
按年月归档 |
/search |
站内搜索 |
/about /projects /links |
关于 / 项目 / 友链 |
/rss.xml /robots.txt /sitemap-index.xml |
订阅与 SEO 文件 |
---
title: "文章标题"
description: "文章简短描述,用于列表和 SEO"
pubDate: 2026-08-15
updatedDate: 2026-08-16 # 可选
tags: ["标签1", "标签2"]
cover: "/images/cover-xxx.svg" # 可选,封面图
category: "分类" # 可选
draft: false # 可选,true 时不发布
------
title: "文章标题"
description: "文章简短描述"
pubDate: 2026-08-15
tags: ["标签1"]
order: 1 # 系列内排序,必填
cover: "/images/cover-xxx.svg" # 可选
draft: false # 可选
---系列文章必须放在以系列名命名的子目录下(如
series/go/01-intro.md),系列名取自子目录名。
-
Mermaid 流程图:用 fenced code block 并把语言写为
mermaid:```mermaid flowchart TD A[开始] --> B{是否成功?} B -- 是 --> C[完成] B -- 否 --> A ```
Mermaid 图在用户浏览器端运行时渲染为内联 SVG(前端加载
mermaid包,无需任何浏览器依赖),并跟随明暗主题重渲染。 -
数学公式:行内公式用
$...$,块级公式用$$...$$:欧拉恒等式 $e^{i\pi}+1=0$。 $$ \sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6} $$
Mermaid 图为纯静态输出,无需额外前置步骤。构建命令
bun run build不依赖任何浏览器。
编辑 src/site.config.ts:
site:站点标题、描述、作者、URL、语言nav:顶部导航菜单social:GitHub / 邮箱 / RSS 等社交链接footer:版权信息与"Powered by"comments:评论系统配置(enabled: 布尔值,envId: Twikoo 服务端地址,支持环境变量PUBLIC_TWIKOO_ENV_ID)
友链数据编辑 public/links.json:
[{ "name": "站点名", "url": "https://…", "avatar": "", "desc": "一句话介绍", "category": "分组" }]项目为纯静态输出,产物在 dist/,可直接部署到任意静态托管:
- Vercel:已提供
vercel.json(bun run build构建) - Netlify:已提供
netlify.toml - GitHub Pages:已提供
.github/workflows/deploy.yml(Actions 自动构建发布) - 其他平台:构建命令
bun run build,输出目录dist
部署前请将
src/site.config.ts中的site.url与astro.config.ts的site改为你的真实域名,否则 sitemap / canonical / RSS 链接会指向占位地址。
| 依赖 | 版本 |
|---|---|
| Astro | ^7.2 |
| TypeScript | 7.0 |
| UnoCSS(preset-wind4 + attributify) | ^66.7 |
| @astrojs/rss | ^4.0 |
| @astrojs/sitemap | ^3.7 |
| rehype-katex | 7 |
| remark-math | ^6 |
| Mermaid(前端运行时渲染) | ^11 |
| 运行时 | Bun ≥ 1.3 / Node ≥ 22.12 |
MIT