博客README.md
the0n3 blog
这是一个极简风格博客,用户只需关注 Markdown 写作,构建过程自动生成静态站点,无需数据库。
特性
- 使用带 YAML Front Matter 的 Markdown 作为文章源
- 自动生成首页、标签页、分类页、归档页、文章详情页
- 支持深浅主题切换
- Prism 代码高亮
- 文章页可选目录(基于 h2/h3 自动生成)
- 阅读进度条与目录联动高亮
- 图片增强(懒加载 + 点击放大)
- 向上滚动自动显示导航栏
- Callout 语法([!NOTE]/[!TIP] 等)
- 构建过程写入 logs/build.log
- 生成 dist/sitemap.xml(基于 config/site.php 的 url)
- GitHub Action 自动构建部署到 gh-pages 分支
- Giscus 评论系统支持(需自行配置 repo / repo_id / category / category_id)
快速上手
环境要求
- PHP ≥ 7.4
- Composer
验证:
php -v
composer -V
安装依赖
composer 依赖安装:
composer install
创建文章
运行 main.php 生成新文章模板:
php main.php new "文章标题"
在 posts/ 下会生成一个新的 Markdown 文件,把生成的模板内容复制进去
注意,--- 分隔符必须顶格、并且必须出现在文件开头
构建博客
php main.php build
构建流程:
- 清空 dist/
- 资源映射
- 解析 Markdown
- 校验数据
- 构建数据索引
- 渲染页面
最终生成所有静态文件到 dist/ 目录,博客即完成构建,在 dist 目录下开启web服务即可预览。
php -S localhost:8000 -t dist/
如果部署在 github pages,把 dist/ 目录下的所有文件推送到 gh-pages 分支即可。
自动构建
功能说明:本地在 posts 目录文章书写完成后,提交到 GitHub 仓库,GitHub Action 会自动触发构建流程,构建完成后会将 dist 目录下的静态文件推送到 gh-pages 分支,实现自动部署。
需要给项目开启 action 的读写权限
Settings → Actions → 常规(General)下滑找到 Workflow permissions,选择 Allow GitHub Actions to read and write permissions

目录结构
.
├─ assets/ 前端资源(CSS / JS / Prism)
├─ config/ 站点配置
├─ logs/ 构建日志
├─ posts/ Markdown 文章(支持子目录)
├─ public/ 静态资源(原样拷贝到 dist/)
├─ images/ 图片资源(原样拷贝到 dist/images/)
├─ src/ 核心 PHP 逻辑
├─ templates/ 页面模板
├─ dist/ 构建输出(生成后出现)
└─ main.php CLI 入口
文章格式
每篇文章为 Markdown 文件,需包含 YAML Front Matter,例如:
---
title: Hello World
date: 2026-03-20
permalink: /posts/hello-world/
tags:
- 示例
categories:
- 示例
pin: 0
draft: false
sidebar: true
---
文章文件放在 posts/ 下即可(可分子目录)。
Front Matter 字段说明
必需字段(缺失会报错):
- title:文章标题
- date:日期(支持 YYYY-MM-DD 或可被解析的字符串)
- permalink:文章永久链接(例如 /posts/hello-world/)
可选字段(未填写会自动补默认值):
- tags:标签数组,默认 []
- categories:分类数组,默认 [](支持单个字符串)
- pin:置顶优先级,0-3,数字越小优先级越高,默认 0
- draft:是否草稿,默认 false(true 时构建会跳过)
- sidebar:是否显示文章目录侧边栏,默认 true
配置说明
- config/site.php:站点标题、作者、站点地址等
- 其中 url 会用于生成 sitemap.xml 的站点根地址(例如 https://example.com)
Giscus 评论系统
默认关闭。如需启用,请在 config/site.php 的 giscus 配置中填入你自己的参数(repo / repo_id / category / category_id)。
重要:不要直接使用他人的配置,否则评论会写入对方仓库。
注意:启用 Giscus 评论系统需要在 GitHub 仓库创建 Discussions,具体步骤参考这篇文章 https://www.lixueduan.com/posts/blog/02-add-giscus-comment/
备注
- 主题与排版变量在 assets/css/site.css 中
- 目录由前端脚本根据 h2/h3 生成
- 阅读进度条:assets/js/readingProgress.js + assets/css/reading-progress.css
- 图片增强:assets/js/imageEnhance.js + assets/css/image-enhance.css
- 导航栏自动显示:assets/js/navReveal.js + assets/css/nav-reveal.css
- Callout 支持由后处理完成(src/Markdown.php)
- 构建日志写入 logs/build.log(默认追加写入;超过 14 天会自动清空重写;每次构建会写入分隔线)
- main.php 固定时区为 Asia/Shanghai,保证日志与日期输出为北京时间
- permalink 会做冲突校验:不能与系统页(/tags/、/categories/、/archives/)或 public/images 下已有文件路径冲突
性能测试
在一台 Windows 设备上,构建一个包含 182 篇文章、约 200MB 图片资源的博客,完整构建时间约为 2 秒。
主要耗时集中在静态资源复制(assets/、public/、images/ → dist/),Markdown 解析与页面渲染开销较低。
PS: php .\main.php build
[2026-03-24 15:12:18] [信息] 开始构建...
[2026-03-24 15:12:18] [信息] 清理 dist 目录...
[2026-03-24 15:12:18] [信息] 1. 清空 dist/ 用时 0.516 秒。
[2026-03-24 15:12:18] [信息] 复制静态资源...
[2026-03-24 15:12:19] [信息] 2. 资源映射 用时 1.123 秒。
[2026-03-24 15:12:19] [信息] 加载并处理文章...
[2026-03-24 15:12:19] [信息] 3. 解析 Markdown 用时 0.039 秒。
[2026-03-24 15:12:19] [信息] 校验文章数据...
[2026-03-24 15:12:19] [信息] 4. 校验数据 用时 0.003 秒。
[2026-03-24 15:12:19] [信息] 准备数据...
[2026-03-24 15:12:19] [信息] 5. 构建数据索引 用时 0.153 秒。
[2026-03-24 15:12:19] [信息] 生成页面...
[2026-03-24 15:12:20] [信息] 6. 渲染页面 用时 0.183 秒。
[2026-03-24 15:12:20] [信息] 构建完成,用时 2.02 秒。
[2026-03-24 15:12:20] [信息] - 生成文章数:182
[2026-03-24 15:12:20] [信息] - 标签数:142
[2026-03-24 15:12:20] [信息] - 分类数:17
计划中的功能
- Logo、favicon、社交链接、关于页等站点细节
- 增量构建
- 评论系统
- 全文搜索