Runsli 的小站

Aonote 近期更新:no-JS 静态博客生成器

建站日志; Aonote; 极简主义
997 字

算一算,距离我在小站里介绍 PureMo-Blog 已经过去三个月。那段时间它还是一个「能跑起来」的 Python 静态生成器;到了 5 月中旬,我又连着推了一轮改动,并正式更名为 Aonote

这篇建站日志把近期 commit 收拢成一条线,方便自己回顾,也给你一张「现在生成器能做什么」的快照。

在线演示:aonote.vercel.app

这轮更新在做什么

Aonote 仍然坚持一件事:Markdown 进,纯 HTML/CSS 出。没有 React/Vue,也没有客户端运行时;移动端导航、目录折叠、回到顶部、锚点跳转都靠原生 HTML 与 CSS 完成。

5 月的迭代可以粗分成四条线:

  1. 写作侧:Markdown 富排版与代码块体验。
  2. 阅读侧:无障碍、键盘焦点、亮暗色代码主题。
  3. 分发侧:RSS、Atom、sitemap、Open Graph 等元信息。
  4. 工程侧:构建后健康检查,把明显问题拦在部署之前。

Markdown 与代码块

目标是作者只写 Markdown,生成器负责把常见技术博客排版一次做到位。主要改动包括:

  • 冒号式 admonition::: note 等)与更完整的样式示例。
  • Emoji 短码可选代码块标题diff/patch 代码块(增删行样式,并补充读屏标签)。
  • 表格支持 Table: / 表格: 形式的 caption;过宽表格可横向滚动。
  • 数学公式在构建期渲染为 MathML,不依赖浏览器端数学引擎。
  • 代码高亮切换到 GitHub Light / GitHub Dark Dimmed,并修正暗色对比度、长行横向滚动等问题。

无障碍与键盘体验

no-JS 不等于「天然无障碍」。HTML 语义、焦点顺序、读屏文案仍然要刻意设计。

  • 页面级:跳过链接、导航 aria-current、可见键盘焦点、prefers-reduced-motion;锚点 scroll-margin-top 避免标题被 sticky header 挡住。
  • 组件级:表格滚动区域、脚注、任务列表、diff 行补充读屏友好标签;键盘可操作的代码块与原生 <details> 折叠。
  • 构建期:A11Y 类健康检查(例如图片 alt 缺失或过于笼统);可选 python check_site.py --focus-report 输出焦点顺序,便于人工走查 Tab 链。

这与此前 严格遵循 nojs.club 那轮修复是同一方向的延续。

订阅、SEO 与界面

分发与元信息

  • 除原有 RSS 外,新增 Atomatom.xml),并增加 Feed 落地页。
  • sitemap.xmlrobots.txt、canonical、Open Graph、Twitter Card、文章时间戳。
  • 真实 404.html 且带 noindexBASE_URLREPO_SUBPATH 支持自定义域名与 GitHub Pages 子路径。
  • 文章页结构化数据改为 Microdata,最终 HTML 里不再依赖 <script type="application/ld+json">

界面与国际化

  • 移动端汉堡导航(仍无 JS);归档、license 等文档型 UI 细节持续打磨。
  • 可配置界面翻译i18n.py,支持 zh-CN / en)。
  • 生成 HTML 可选压缩;CSS 使用内容 hash 文件名,增量构建会清理旧的 hash CSS。

构建后健康检查

autobuild.py 在每次构建结束后会调用 check_site.py。检查不通过则不会更新构建 manifest,避免把明显问题带进部署包。报告按类别分组,例如 No-JS(页面是否含可执行脚本)、Links、SEO、Feeds、A11Y、Assets 等。

本地可这样跑:

python3 autobuild.py
python3 check_site.py --focus-report   # 可选:焦点顺序报告

仓库侧还做了 README 中英拆分、示例 Markdown 按主题拆开,以及移除代码里偏 changelog 的冗长注释——细节留在 Git 历史里即可。

结语

如果用一句话概括:Aonote 不再只是「把 Markdown 转成 HTML」,而是在 no-JS 前提下,把写作体验、阅读体验、订阅分发和构建后质检串成了一条可维护的流水线。

对我自己的这个小站来说,可以继续安心写随笔和技术笔记,而把「链接断了没有、Feed 是否完整、页面是否偷偷带了 script」交给构建脚本在发布前拦一道。后续如果 health check 或 Markdown 扩展还有新玩法,我也会继续在这里记录。

另见:Aonote 项目生态:三个入口怎么选 · 官网完整说明