基于Hugo与Git构建个人知识库:纯文本、版本控制与静态站点实践
1. 项目概述与核心价值
最近在整理个人知识库和项目文档时,我又一次被一个老问题困扰:如何高效地管理那些散落在各处、格式不一的笔记、代码片段和临时想法?市面上的笔记软件要么太重,要么太封闭,要么就是功能太单一。直到我重新审视并深度使用了Hengo这个项目,才感觉找到了一个相当优雅的解决方案。Hengo 不是一个新概念,它本质上是一个基于 Git 的、纯文本的、高度可定制化的知识管理系统。但它的魅力在于,它将“简单”和“强大”这两个看似矛盾的特质结合得非常好,特别适合开发者、技术写作者以及任何希望完全掌控自己数字知识资产的人。
简单来说,Hengo 提供了一个框架和一套工具,让你能用最熟悉的纯文本(比如 Markdown)来写一切,然后用 Git 进行版本管理,再通过静态站点生成器(通常是 Hugo)发布成一个可搜索、可浏览的静态网站。你的所有知识最终都变成了一堆.md文件和一个 Git 仓库,彻底摆脱了平台绑定的风险。听起来是不是有点像很多技术博客的做法?没错,但 Hengo 将其理念扩展到了整个知识工作流,从 fleeting notes(闪念笔记)到 literature notes(文献笔记),再到 permanent notes(永久笔记),都能在这个体系内流畅运转。接下来,我就结合自己搭建和使用的经验,带你彻底拆解 Hengo,看看它如何从零开始构建一个属于你自己的、永不丢失的“第二大脑”。
2. 核心架构与设计哲学拆解
2.1 为什么是“纯文本 + Git + 静态站点”?
这个技术栈选择是 Hengo 的灵魂,也是其长期价值的保障。我们来逐一拆解背后的考量:
纯文本(Markdown):这是可读性、可移植性和长寿性的基石。.md文件在任何操作系统上都能用最简单的文本编辑器打开,五十年后依然可以。它不依赖任何专有软件或数据库。对于知识记录来说,格式足够丰富(标题、列表、代码块、链接、图片),又不会过于花哨而干扰内容本身。更重要的是,纯文本是“可编程”的,你可以用grep,sed,awk等命令行工具批量处理,也可以用任何编程语言进行解析和转换,这为自动化提供了无限可能。
Git:Git 不仅是版本控制工具,更是时光机和协作平台。每一次修改都有迹可循,你可以大胆地删改而不用担心丢失历史。通过分支,你可以尝试不同的笔记组织方式(比如尝试 Zettelkasten 卡片盒法),成熟后再合并。Git 的分布式特性意味着你的知识库可以轻松地在你的笔记本电脑、家里的 NAS、公司的电脑以及 GitHub/GitLab 等远程仓库之间同步,实现真正的多端备份和访问。
静态站点生成器(Hugo):这是将私有知识库“发布”为可浏览、可搜索的网站的关键。Hugo 速度快、主题丰富,能将你的 Markdown 笔记快速转换成 HTML。这样一来,你不仅可以在本地用编辑器查看,还可以在浏览器里以更友好的方式浏览,利用站内搜索功能快速定位内容。生成的静态网站可以部署在几乎任何地方(Netlify, Vercel, GitHub Pages,甚至你自己的服务器),成本极低甚至免费。
这个架构的巧妙之处在于,每一层都依赖成熟、开源、长期维护的基础设施,最大程度地避免了“轮子”和单点故障。你的数据(Markdown文件)和配置(Hugo主题、模板)完全分离,并且都掌握在自己手中。
2.2 Hengo 的工作流:从输入到输出
Hengo 倡导的是一种渐进式总结和知识连接的工作流,深受 Zettelkasten(卡片盒笔记法)和 PARA(项目-领域-资源-归档)方法的影响。其核心流程可以概括为四个阶段:
捕获(Capture):随时随地记录想法。这可以通过一个简单的命令行脚本、一个手机端的 Markdown 编辑器(同步到指定文件夹),或是 Obsidian、Logseq 等本地优先的笔记软件来完成。关键是将所有输入都汇集到一个统一的“收件箱”(Inbox)目录下。
处理与组织(Process & Organize):定期(比如每天或每周)处理收件箱。为每一条笔记添加合适的元数据(如标签、分类、创建日期),根据内容将其移动到对应的分类文件夹(如
projects/,areas/,resources/),并最重要的是,思考这条笔记与已有笔记之间的关联,通过双向链接([[笔记标题]])将它们连接起来。创作与输出(Create & Output):当知识网络积累到一定程度,特定的主题会自然浮现。此时,你可以基于相关的笔记群,轻松地组合、提炼,创作出博客文章、技术文档、项目方案甚至是一本书。Hugo 会负责将你的笔记和它们之间的链接关系,渲染成可导航的网站。
回顾与迭代(Review & Refine):通过定期浏览生成的静态网站,或者使用笔记软件的关系图谱功能,你可以发现自己知识网络中的薄弱环节或新的连接点,从而驱动进一步的学习和记录,形成正向循环。
这个工作流不是僵化的,Hengo 提供的更像是一个工具箱和最佳实践指南,你可以根据自己的习惯进行裁剪。比如,你可以完全在命令行下用 Vim 和 Git 完成所有操作,也可以搭配图形化的 Obsidian 来获得更直观的链接图谱体验。
3. 环境准备与核心工具链配置
3.1 基础环境搭建
要运行 Hengo,你需要准备以下几样东西,它们都是跨平台的:
- Git:版本控制核心。确保已安装并能正常使用
git命令。 - Hugo (Extended 版本):静态站点生成器。Hengo 通常推荐使用 Hugo,并且为了支持一些高级主题特性(如 SCSS),建议安装 Extended 版本。
- 文本编辑器或专业笔记软件:你可以选择极简的 VS Code、Sublime Text,也可以选择对 Markdown 和双向链接支持更好的 Obsidian、Logseq。我个人的组合是:日常快速记录用 Obsidian(因为它能实时渲染链接和图谱),批量处理和 Git 操作则在命令行完成。
安装 Hugo Extended 版本是第一个小坑。以 macOS 为例,使用 Homebrew 安装最方便:
brew install hugo安装后,用hugo version确认是否包含“extended”字样。对于 Windows 用户,可以从 GitHub Releases 页面直接下载解压,并将可执行文件路径加入系统环境变量。
3.2 初始化你的 Hengo 知识库
Hengo 本身不是一个需要“安装”的软件,它是一个项目模板和一套约定。最快捷的开始方式是克隆其官方示例仓库:
# 克隆示例仓库到本地,并命名为 my-knowledge-base(你可以改成任何名字) git clone https://github.com/Henrique-Henrique/hengo.git my-knowledge-base cd my-knowledge-base这个仓库已经预置了 Hugo 站点结构、一个适合知识管理的主题(通常是类似hugo-theme-stack或自定义的简洁主题)以及一些示例笔记和目录结构。接下来你需要将其初始化为你自己的 Git 仓库:
# 删除原有的 Git 历史,从头开始 rm -rf .git git init git add . git commit -m "Initial commit: My Hengo knowledge base"现在,你就拥有了一个完全属于你自己的知识库骨架。目录结构大致如下:
my-knowledge-base/ ├── archetypes/ # Hugo的内容模板 ├── content/ # **核心!所有笔记都在这里** │ ├── inbox/ # 收件箱,存放未处理的笔记 │ ├── notes/ # 永久笔记 │ ├── posts/ # 博客文章(可选) │ └── _index.md # 主页内容 ├── data/ # 站点数据文件 ├── layouts/ # 布局模板(可覆盖主题默认布局) ├── static/ # 静态资源(图片、附件) ├── themes/ # Hugo主题 ├── config.toml # **核心!站点配置文件** └── .gitignore # Git忽略文件content/目录是你的主战场,config.toml则控制着整个站点的行为和外观。
3.3 关键配置详解:config.toml
Hugo 的配置文件是定制的核心。打开config.toml,你需要关注以下几个关键部分:
基础站点信息:
baseURL = "https://your-username.github.io/" # 如果你打算部署到GitHub Pages languageCode = "zh-cn" title = "我的知识库" theme = "hugo-theme-stack" # 这里替换为你实际使用的主题名baseURL非常重要,它会影响所有生成的绝对链接。在本地开发时,可以暂时留空或设为“/”。
内容管理配置:
[params] # 启用页面最后修改时间显示,这对笔记很重要 showLastMod = true # 启用阅读时间估算 showReadingTime = true # 设置笔记的默认内容类型 defaultContentType = "notes" # 对于笔记,我们可以配置特定的输出格式 [outputs] home = ["HTML", "RSS"] section = ["HTML", "RSS"] # 为 `notes` 这个内容类型也输出HTML页面 notes = ["HTML"]前端主题配置: 这部分取决于你使用的主题。以常见的知识管理主题为例,你可能需要配置导航栏、侧边栏、搜索功能等。通常主题的文档或示例config.toml中会有详细说明。一个重要的配置是启用站内搜索,这通常需要主题支持并集成 Lunr.js 或 Fuse.js 等客户端搜索库。
注意:在修改主题配置前,最好先将主题文件夹复制到
layouts/或assets/目录中进行覆盖式定制,而不是直接修改themes/下的文件。这样在主题升级时,你的定制不会被覆盖。具体方法是在项目根目录创建同名的目录结构,Hugo 会优先使用项目根目录下的文件。
4. 核心工作流实操:从一条笔记到知识网络
4.1 创建与编辑笔记:元数据与双向链接
在 Hengo 体系下,一篇笔记不仅仅是一个 Markdown 文件。为了让它能被 Hugo 正确解析和归类,我们需要在文件头部添加Front Matter(前言),这是一种 YAML、TOML 或 JSON 格式的元数据块。
创建一个新笔记,例如content/notes/my-first-note.md:
--- title: "理解Hengo的核心架构" date: 2023-10-27T10:00:00+08:00 lastmod: 2023-10-27T15:30:00+08:00 draft: false tags: ["hugo", "git", "knowledge-management"] categories: ["技术"] summary: "本文拆解了Hengo所采用的‘纯文本+Git+静态站点’技术栈的深层原因与优势。" --- # 理解Hengo的核心架构 Hengo 不是一个软件,而是一套**方法论和工具链**... 它的三大支柱是: 1. **纯文本 (Markdown)**: 保障了数据的可移植性与长寿性... 2. **Git**: 提供了强大的版本控制、历史追溯与多端同步能力... 3. **静态站点生成器 (Hugo)**: 将私有笔记转化为可公开浏览、可搜索的网站... ## 为什么这个组合如此强大? 这个组合巧妙地规避了... [[笔记锁定的风险]]。同时,它鼓励... [[渐进式总结]] 的工作方式。 --- ## 相关链接 - 上一级: [[技术索引]] - 相关概念: [[Zettelkasten]], [[数字花园]]Front Matter 字段解析:
title,date: 必备,用于排序和显示。lastmod: 非常重要!对于笔记,内容会不断更新,这个时间戳能帮助你和读者识别最新版本。draft: false: 发布笔记时必须设为false,否则 Hugo 不会生成该页面。tags和categories: 分类和标签,是组织内容的重要维度。建议标签保持扁平化、具体化,类别可以有一定层级。summary: 摘要,会显示在文章列表里,有助于快速浏览。
双向链接的魔法: 注意笔记正文中[[笔记锁定的风险]]这样的语法。这是 Markdown 的扩展语法(大部分 Hugo 主题和 Obsidian 都支持),它创建了一个内部链接。当 Hugo 生成网站时,它会将这些[[ ]]转换为指向对应笔记页面的超链接。如果目标笔记不存在,它可能显示为待创建状态(取决于主题)。这是构建知识网络的核心操作。
4.2 组织与分类:文件夹结构策略
如何组织content/下的文件夹,见仁见智。Hengo 示例提供了一种参考,但你可以建立自己的体系。我结合 PARA 方法,形成了这样的结构:
content/ ├── inbox/ # 收集箱,所有临时想法、摘录先丢这里 ├── notes/ # 永久笔记库 │ ├── areas/ # 领域知识(持续关注的领域,如“机器学习”、“产品设计”) │ ├── projects/ # 项目相关笔记(有明确起止时间) │ ├── resources/ # 资源索引(书籍、文章、工具等) │ └── meta/ # 元笔记(关于如何记笔记的笔记) ├── posts/ # 正式的博客文章(由笔记提炼而成) └── pages/ # 静态页面(如关于我、站点地图)关键原则是:文件夹结构用于粗粒度分类,标签用于细粒度、跨维度的关联。不要创建过深的文件夹嵌套(建议不超过3级),否则会加大文件定位的难度。利用好tags和双向链接,让信息自己“生长”出结构。
4.3 本地开发与实时预览
Hugo 提供了一个极佳的本地开发服务器,可以实时预览你对笔记和站点的修改:
# 在项目根目录执行 hugo server -D-D参数表示同时构建草稿(draft: true)内容,方便预览未完成的笔记。执行后,打开浏览器访问http://localhost:1313,你就能看到你的知识库网站了。修改任何 Markdown 文件,保存后浏览器页面会自动热重载,几乎无延迟,体验非常流畅。
这个本地服务器是你日常整理和查看笔记的主要窗口。你可以在这里检查链接是否正常、排版是否满意。
4.4 生成静态网站
当一批笔记整理完毕,准备“发布”时,运行生成命令:
# 生成最终静态网站到 `public/` 目录 hugo如果只想生成非草稿内容,直接运行hugo即可。这个过程非常快,Hugo 会将所有content/下的 Markdown 文件、主题模板、静态资源等编译成纯粹的 HTML、CSS、JS 文件,输出到public/文件夹。这个文件夹里的内容,就是可以部署到任何 Web 服务器的最终产品。
5. 部署与自动化发布流程
5.1 部署到 GitHub Pages(免费方案)
GitHub Pages 是个人知识库最方便、最经济的托管选择。操作步骤如下:
在 GitHub 上创建新仓库:仓库名格式为
<你的用户名>.github.io(例如henrique-henrique.github.io)。这是使用 GitHub Pages 个人站点的特殊命名约定,访问地址就是https://<你的用户名>.github.io。将本地仓库与远程关联:
git remote add origin https://github.com/<你的用户名>/<你的用户名>.github.io.git创建部署脚本:在项目根目录创建一个
deploy.sh脚本(Windows 用户可创建deploy.bat),自动化构建和推送流程。#!/bin/bash echo -e "\033[0;32mDeploying updates to GitHub...\033[0m" # 生成静态网站 hugo # 进入 public 文件夹 cd public # 初始化 Git(如果第一次)并添加更改 git add . # 提交更改 msg="rebuilding site $(date)" if [ -n "$*" ]; then msg="$*" fi git commit -m "$msg" # 推送到远程仓库的 main 分支 git push origin main # 回到项目根目录 cd ..给脚本执行权限:
chmod +x deploy.sh。分离源文件与生成文件(推荐):一个更清晰的做法是使用两个 Git 分支。
main分支:存放public/文件夹的内容(即生成的网站)。GitHub Pages 会自动从这个分支提供服务。source分支:存放整个 Hugo 项目的源文件(包括content/,themes/,config.toml等)。 这样,你的写作历史(源文件)和发布历史(生成文件)互不干扰。你可以配置 GitHub Actions 自动化这个过程:每当向source分支推送更新时,自动运行hugo构建网站,并将结果提交到main分支。
5.2 使用 GitHub Actions 实现自动化
对于上述的双分支策略,GitHub Actions 是完美的自动化工具。在项目根目录创建.github/workflows/gh-pages.yml文件:
name: Deploy Hugo site to Pages on: push: branches: [ "source" ] # 当 source 分支有推送时触发 workflow_dispatch: # 允许手动触发 permissions: contents: write # 授予写入内容的权限 jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive # 如果主题是子模块,需要这个 fetch-depth: 0 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: 'latest' extended: true # 使用 Extended 版本 - name: Build run: hugo --minify # 构建并压缩输出 - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PERSONAL_TOKEN }} # 需要在仓库设置中配置的 Secret publish_dir: ./public publish_branch: main # 部署到 main 分支 force_orphan: true # 保持 main 分支纯净,只包含最新构建配置好后,你只需要向source分支推送笔记更新,几分钟后,你的线上知识库就会自动更新。完全实现了“写笔记 -> Git提交 -> 自动发布”的无缝流程。
实操心得:在
config.toml中,baseURL需要根据你的最终访问地址正确设置。对于<用户名>.github.io仓库,通常是“https://<用户名>.github.io/”。如果部署在子路径下,如https://<用户名>.github.io/my-blog/,则需设置为“/my-blog/”,否则 CSS 和 JS 资源会加载失败。
6. 高级技巧与个性化定制
6.1 优化搜索体验
静态站点的搜索是一个挑战。常见的解决方案有:
客户端搜索 (Lunr.js / Fuse.js):Hugo 在构建时生成一个包含所有文章标题、内容和链接的 JSON 索引文件。用户在浏览器中搜索时,JavaScript 库会加载这个 JSON 文件并在本地进行匹配。优点是无需服务器端支持,完全静态;缺点是当笔记数量巨大(超过1000篇)时,索引文件体积会变大,影响初次加载速度。大部分 Hugo 知识管理主题都内置了此功能。
第三方搜索服务 (Algolia):提供强大、快速的云端搜索服务,有免费额度。需要将站点内容通过 API 提交到 Algolia 创建索引,并在网站中集成其搜索框组件。适合对搜索速度和相关性排序要求高的场景。
对于个人知识库,客户端搜索通常足够。确保你的主题启用了该功能,并在config.toml中配置索引包含的字段(如标题、内容、摘要)。
6.2 管理图片与附件
对于图片,最佳实践是将其放在static/目录下,例如static/images/2023/10/。在 Markdown 中引用时,使用相对站点的根路径:
这样 Hugo 在构建时会原样复制到public/对应位置。对于大量图片,可以考虑使用图床(如 Imgur, SM.MS)或对象存储(如 AWS S3, 腾讯云 COS),然后在笔记中引用绝对 URL,以减轻 Git 仓库的负担和加速页面加载。
6.3 自定义主题与布局
Hugo 的主题系统非常灵活。你可以从修改config.toml中的主题参数开始,比如颜色、字体、布局开关。更深度的定制,需要覆盖主题模板。
例如,你想修改笔记的单页模板,可以在项目根目录创建layouts/_default/single.html文件。Hugo 会优先使用你这个文件,而不是主题中的同名文件。你可以从主题的对应文件复制过来,再进行修改。常用的定制点包括:
- 在文章末尾自动显示“相关文章”(基于标签匹配)。
- 修改导航栏,增加一个“随机一篇”的链接。
- 添加自定义的 Shortcodes(短代码),用于实现特殊的内容块,如警告框、折叠面板等。
6.4 备份与同步策略
虽然 Git 本身就是一个备份工具,但为了万无一失,建议实施多级备份:
- 本地 Git 仓库:你的工作副本。
- 远程 Git 仓库 (GitHub/GitLab):主要的远程备份和协作中心。
- 定期本地磁盘备份:使用 Time Machine (macOS)、rsync 等工具,将整个项目文件夹备份到外部硬盘或 NAS。
- 云存储同步:可以使用 Dropbox、iCloud Drive 或 OneDrive 同步
content/目录(注意避开public/和resources/_gen等生成目录),作为另一层实时备份。
一个简单的 rsync 备份脚本示例:
#!/bin/bash BACKUP_DIR="/Volumes/BackupDisk/MyKnowledgeBase" SOURCE_DIR="$HOME/Documents/my-knowledge-base" rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_DIR/" --exclude='public/' --exclude='.git/' echo "Backup completed at $(date)"7. 常见问题与故障排除实录
在实际使用 Hengo 的过程中,你可能会遇到以下典型问题。这里记录了我的排查经验和解决方案。
7.1 Hugo 构建或服务器启动失败
问题现象:执行hugo server或hugo时,报错并终止。
排查步骤:
- 检查 Hugo 版本:
hugo version,确认是 Extended 版本。某些主题依赖 Extended 版的 SCSS 处理功能。 - 检查配置文件语法:
config.toml或config.yaml中可能存在语法错误,如括号不匹配、缩进错误(YAML格式对缩进敏感)。可以使用在线 TOML/YAML 校验工具检查。 - 检查主题依赖:如果你使用了 Git Submodule 方式安装主题,确保子模块已正确初始化并更新:
git submodule init git submodule update - 查看详细错误信息:Hugo 的错误信息通常比较清晰。关注最后几行,它会指出出错的文件和大致位置。常见错误包括:Front Matter 格式错误、模板文件中使用了未定义的变量等。
7.2 网站样式丢失或布局错乱
问题现象:本地预览或部署后,网站没有样式,变成纯文本。
可能原因与解决:
baseURL配置错误:这是最常见的原因。baseURL是站点根路径。如果部署在域名根目录,应为“https://yourdomain.com/”;如果部署在子路径,如“https://yourdomain.com/blog/”,则必须设置为“/blog/”(注意开头结尾的斜杠)。主题中 CSS/JS 的引用路径都基于这个值。- 主题资源未正确加载:检查浏览器开发者工具(F12)的“网络”选项卡,查看 CSS/JS 文件是否返回 404 错误。确认
themes/目录下主题文件夹存在且完整。 - 缓存问题:尝试使用
hugo server --disableFastRender启动,并强制刷新浏览器缓存(Ctrl+Shift+R)。
7.3 双向链接不生效或显示为纯文本
问题现象:笔记中的[[链接]]没有被渲染成可点击的超链接。
排查步骤:
- 确认主题支持:并非所有 Hugo 主题都支持
[[ ]]维基式链接。你需要使用专门为笔记优化的主题,如Hugo Theme Stack,Hugo PaperMod,Blowfish等,或者主题明确声明支持 “Wiki Links” 或 “Internal Links”。 - 检查主题配置:在
config.toml中,查看主题的配置部分是否有启用内部链接的选项。例如,对于某些主题,可能需要设置:[markup] [markup.goldmark] [markup.goldmark.extensions] wikilinks = true # 启用维基链接 - 链接格式:确保链接格式正确,为双中括号
[[目标笔记标题]]。如果目标笔记位于子目录,可能需要包含路径,如[[subdir/target-note]]。具体语法需参考你所使用主题的文档。
7.4 搜索功能无法使用
问题现象:网站上的搜索框点击无反应,或提示“索引文件未找到”。
解决思路:
- 生成搜索索引:客户端搜索需要 Hugo 在构建时生成索引 JSON 文件(通常是
index.json)。确保你的config.toml中配置了正确的输出格式。例如:
运行[outputs] home = ["HTML", "RSS", "JSON"] # 必须包含 JSONhugo后,检查public/目录下是否有index.json文件。 - 检查搜索脚本路径:查看主题中搜索功能的 JavaScript 代码,确认它尝试加载的 JSON 文件路径是否正确(应与
baseURL配置匹配)。 - 浏览器控制台报错:打开浏览器开发者工具的控制台(Console),查看是否有 JavaScript 错误。常见错误是跨域问题(如果本地用
file://协议打开)或 JSON 文件解析错误。
7.5 Git 提交历史过于杂乱
问题现象:每次写作都会产生大量细碎的提交记录,如“修正错别字”、“更新某一段落”,使得历史记录难以阅读。
优化策略:
- 使用
--amend修正提交:如果上次提交后只是做了小修改,可以使用git commit --amend将修改追加到上一次提交中,而不是创建新提交。 - 交互式变基 (Interactive Rebase):定期(比如每周)对本地尚未推送的提交进行整理。
在打开的编辑器中,你可以将多个git log --oneline # 查看最近提交 git rebase -i HEAD~5 # 整理最近5次提交pick改为squash或fixup,将它们合并成一个提交,并重新编辑提交信息。 - 为发布创建清晰的提交:养成习惯,将日常的“写作提交”和最终的“发布提交”分开。在运行
deploy.sh脚本发布网站前,可以先在source分支上做一个总结性的提交,如“整理并发布10月份机器学习笔记合集”,然后再推送和部署。
7.6 网站访问速度慢
问题现象:部署后的网站,特别是首页或笔记列表页,加载缓慢。
性能优化建议:
- 图片优化:这是最大的性能杀手。确保所有图片都经过压缩。可以使用 Hugo 的图片处理功能(需 Extended 版)或构建管道工具(如 Gulp, Webpack)自动压缩。也可以使用
srcset属性提供响应式图片。 - 减少第三方资源:评估主题中引入的第三方字体、分析脚本等。如果非必要,可以考虑移除或自托管。
- 启用 Hugo 压缩输出:在
hugo命令后加上--minify参数,可以压缩 HTML、CSS、JS 文件。 - 使用 CDN:如果部署在 GitHub Pages,它本身就有一定的 CDN 缓存。对于自定义域名,可以考虑使用 Cloudflare 等 CDN 服务,缓存静态资源。
- 检查生成文件大小:检查
public/index.json(搜索索引)文件是否过大。如果笔记内容极多,可以考虑按标签或分类分割索引,或者切换到服务端搜索方案。
8. 我的使用心得与进阶建议
经过一年多的深度使用,Hengo 这套体系彻底改变了我管理知识的方式。它带来的最大好处是“心安”——我知道我的所有笔记都是纯文本,放在 Git 里,没有任何平台可以将其锁定或关闭。几个关键的体会:
关于工具选择:不要纠结于“最完美”的工具链。核心是Markdown + Git。你可以用 Obsidian 编辑,用 VS Code 编辑,甚至用手机上的 iA Writer 编辑。只要最终文件能同步到那个 Git 仓库里,Hugo 就能把它变成网站。找到让你写作最流畅的那个编辑器,然后围绕它构建自动化流程。
关于笔记结构:前期不要过度设计分类。就从最简单的inbox/和notes/开始。强迫自己每天或每周清空一次inbox/。在移动文件到notes/时,花几分钟添加几个相关的标签和[[ ]]链接。结构会在你写了 50、100 篇笔记后自然浮现,那时再根据高频出现的标签或主题来创建文件夹也不迟。
关于坚持:知识库的威力来自于积累,而积累最大的敌人是启动成本。Hengo 的本地服务器 (hugo server) 启动极快,让你在 10 秒内就能进入写作和浏览状态。把这个浏览器标签页常开,把它当成你的个人维基首页,随时点开记录或查阅,让记录成为一种无压力的习惯。
一个进阶技巧:自动化摘要生成。我写了一个简单的 Python 脚本,在 Git 的pre-commit钩子中运行。它会扫描新增或修改的.md文件,如果 Front Matter 里没有summary字段,它会自动提取文章前 200 个字符(去除 Markdown 标记)作为摘要填充进去。虽然不完美,但大大减少了手动写摘要的负担。自动化是让这套系统持续运转的关键,从小处着手,不断优化你的工作流。
最后,Hengo 不是终点,而是一个坚固的起点。当你熟悉了这套玩法,你可以尝试集成更多的工具:用pandoc将笔记导出为 PDF 或 Word,用make或just管理复杂的构建任务,甚至自己写插件扩展 Hugo 的功能。最重要的是,你创造和连接知识的过程,被一套开放、可控、持久的技术栈所承载,这本身就是数字时代的一种自由。
