# Hugo 与 Htmlpress 对比

> 两款单一二进制的静态站点生成器：文档优先的纯 HTML 与通用的 Go。

[Hugo](https://gohugo.io) 是一款用 Go 编写的通用静态站点生成器。它以单一二进制文件发布，构建速度极快，借助 [Docsy](https://www.docsy.dev) 和 [Hugo Book](https://github.com/alex-shpak/hugo-book) 等社区主题，从博客、作品集到文档站点都能胜任。

## 概览

| 维度       | Htmlpress                            | Hugo                 |
| -------- | ------------------------------------ | -------------------- |
| 语言 / 运行时 | Rust（单一二进制文件，无运行时）                   | Go（单一二进制文件，无运行时）     |
| UI 框架    | 无（纯 HTML + CSS，`htmlpress-*` Web 组件） | Go 模板（HTML + CSS）    |
| 构建工具     | htmlpress 二进制文件                      | Hugo 二进制文件           |
| 内容格式     | HTML 和 Markdown 页面                   | 带 Hugo 短代码的 Markdown |
| 许可证      | MIT，自托管                              | Apache-2.0，自托管       |
| 输出模式     | 预渲染静态页面                              | 预渲染静态页面              |

## 架构

htmlpress 是一个 Rust 二进制文件，可从 npm（`gethtmlpress`）、PyPI 或 crates.io 安装。它用一个布局包裹每个 HTML 页面，并配上导航和主题；没有打包器、没有 UI 框架，也没有插件 API。每个内置文件——布局、样式、脚本以及每个组件——都可以被覆盖：在 `.htmlpress/` 下的相同路径放一个文件即可替换它。

Hugo 是单一的 Go 二进制文件——没有运行时依赖，也没有安装依赖包的步骤。站点结构基于约定：`content/`、`layouts/`、`static/`、`themes/`、`config.toml`（或 `.yaml`/`.json`）。布局使用 Go 的 `html/template` 语法。主题以 git 子模块的方式引入或复制到 `themes/<name>/` 中。htmlpress 的布局是不含模板语法的纯 HTML：由二进制文件填充其中的 `htmlpress-*` 占位元素。

Hugo 并非专为文档而生。同一个二进制文件可以驱动博客、营销站点、作品集和文档——文档场景是通过主题来支持的，而不是一等的栏目类型。

在 htmlpress 这边，内容布局不受约束：它按 glob 扫描（`htmlpress.yaml` 中的 `include`/`exclude`，默认扫描所有 `.html` 文件），页面的 URL 取决于它在 glob 基础目录下的文件路径，因此 `docs/**/*.html` 会把 `docs/guide.html` 发布在 `/guide/`。不要求存在 `docs/` 文件夹。导航由文件夹结构和每个页面的 `<meta name="order">` 构建；文件夹的 `index.html` 为其分组命名。Hugo 从 `content/` 读取内容，URL 结构与目录树一致（并可通过各栏目的 frontmatter 覆盖）。

## 内容层面

Hugo 接受带 frontmatter 的 Markdown；htmlpress 同样接受 HTML 页面和带 frontmatter 的 Markdown。

Hugo 通过**短代码**嵌入组件——这是一种以 Go 模板编写的函数，在 Markdown 中以 `{{< shortcode-name arg="value" >}}` 调用。短代码定义在 `layouts/shortcodes/*.html` 中，是 Go 模板片段，直接输出 HTML。htmlpress 中最接近的对应物是项目组件：`.htmlpress/components/<name>/<name>.html` 会在构建时填充每一个 `<htmlpress-<name>>`。

Hugo 支持基于 Goldmark 的 Markdown 扩展（脚注、表格、定义列表，以及借助插件实现的数学公式）。如需更丰富的交互，通常的做法是嵌入 `<script>`，或在短代码中把 JS 框架作为孤岛使用。

htmlpress 页面是纯语义化 HTML，主题直接根据元素本身设置样式。更丰富的区块是 `htmlpress-*` 自定义元素（`htmlpress-callout`、`htmlpress-tabs`、`htmlpress-filetree`、`htmlpress-cards` 等），其 CSS 和 JS 只会链接到使用该标签的页面。项目可以通过 `.htmlpress/components/<name>/<name>.html` 添加自己的标签，它会在构建时替换该标签。

htmlpress 没有 frontmatter：页面的元数据就是它自己的 `<head>`——`<title>`、`<meta name="description">`、`<meta name="order">`、`<meta name="layout">` 和 `<meta name="image">`；其他 `<head>` 标签会原样保留。Hugo 接受 TOML、YAML 或 JSON 格式的 frontmatter，字段包括 `title`、`date`、`draft`、`weight`、`taxonomies`，以及用户自定义字段。

## 功能矩阵

| 功能        | Htmlpress                                  | Hugo                    |
| --------- | ------------------------------------------ | ----------------------- |
| 版本管理      | 部分支持（每个版本一个分区或一次部署）                        | 否（需通过分支/多个站点手动实现）       |
| 国际化（i18n） | 是（翻译、语言选择器、内置 7 种界面语言）                     | 是（内置，多语言模式）             |
| 搜索        | 是（内置，客户端）                                  | 否（由主题提供或使用外部服务）         |
| 博客        | 否                                          | 是（任何栏目都可按日期排序）          |
| 更新日志      | 否                                          | 否（手动）                   |
| 站点地图      | 是（需设置 `site`）                              | 是（内置）                   |
| RSS       | 否                                          | 是（内置，按栏目）               |
| 主题        | `.htmlpress/` 中的覆盖文件 + `--htmlpress-*` 令牌  | 主题目录及模板覆盖               |
| 插件        | 否（使用 `.htmlpress/components/` 中的项目组件）      | Hugo Modules（Go）、短代码、钩子 |
| 自定义路由     | 任意 `.html` 文件；额外布局放在 `.htmlpress/layouts/` | 布局 + 内容栏目               |
| 独立工具链     | 单一 Rust 二进制文件（npm、PyPI 或 crates.io）        | 单一 Go 二进制文件             |
| 构建速度      | 原生二进制文件，无打包器                               | 属于最快的静态站点生成器之一          |

## 输出与部署

两款工具都会生成可部署到任意静态托管平台的静态 HTML 和资源文件。Hugo 默认输出到 `public/`；htmlpress 输出到 `.htmlpress/build/`。

htmlpress 会把每个页面写成 `.htmlpress/build/` 中的静态 HTML，同时生成 `robots.txt`、设置了 `site` 时的 `sitemap.xml`、每个页面的 Markdown 副本、`llms.txt`，以及 `.well-known/agent-skills/` 下的智能体技能。`base` 键可让站点在子路径下提供服务。各托管平台的指南见[部署](/zh/deployment/)。

## 另请参阅

- [编写](/zh/authoring/)——htmlpress 的 HTML 编写方式。
- [自定义](/zh/customization/)——htmlpress 的配置键与覆盖文件。
- [对比](/zh/comparison/)——返回索引。
