为什么坚持 no-JS
Aonote 的目标用户写的是文章、笔记与文档,不是需要复杂客户端状态的应用。因此默认输出不包含可执行的浏览器 JavaScript。
页面是文档
博客与知识库的核心体验是:阅读、跳转、订阅、被搜索引擎索引。这些都不应依赖:
- 客户端路由与 hydration
- 运行时 Markdown 或数学渲染
- 用脚本补上的导航、目录或主题切换
Aonote 把代码高亮、公式(MathML)、目录锚点、Open Graph 等放在 构建阶段 完成,部署后只有 HTML 与 CSS。
结构化数据不用 <script>
许多站点用 JSON-LD 的 <script type="application/ld+json"> 做结构化数据。Aonote 改用 Microdata 写在 HTML 元素上,避免在页面里出现 script 标签,也更贴近 nojs.club 所倡导的精神。
交互用 HTML/CSS 原生能力
这些能力不依赖脚本:
- 移动端导航(
:target/ checkbox hack 等纯 CSS 方案) <details>/<summary>折叠- 返回顶部(锚点链接)
- 浅色/暗色模式(
prefers-color-scheme与 CSS 变量)
可验证
check_site.py 会检查:
- 是否存在不应出现的可执行脚本
- 链接、锚点、图片与 Feeds 是否有效
- 基础无障碍与 SEO 细节
构建失败时不会更新增量清单,避免「坏构建」被当成已发布状态。
不是反对一切 JS
no-JS 指的是 你的读者不必为你的内容站加载脚本。构建工具本身用 Python,与浏览器无关。若你将来需要个别页面的例外,应在明确约束下审慎添加,并仍通过健康检查把关。
若仍需要 JavaScript
no-JS 是本仓库(Python 版)的默认约束,不是否定一切前端能力。若你的站点需要 Astro 组件、客户端增强或更复杂的交互,可使用同系列的 astro-theme-aonote。详见 项目生态。