Hugo 与 Htmlpress 对比
Hugo 是一款用 Go 编写的通用静态站点生成器。它以单一二进制文件发布,构建速度极快,借助 Docsy 和 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
键可让站点在子路径下提供服务。各托管平台的指南见部署。
另请参阅
用 ❤ 和 Htmlpress 构建