作为一个重度 Obsidian 用户,我一直在寻找一种更高效的方式来将我的笔记发布到 Hugo 博客上。经过不断的探索和优化,我开发了一套完整的自动化解决方案,让你可以通过一键操作将 Obsidian 笔记转换并发布到 Hugo 博客。
为什么需要这个集成方案?
现有痛点
- 格式转换繁琐:Obsidian 使用 YAML 前置数据,Hugo 需要 TOML 格式
- 图片处理复杂:需要手动移动图片到正确的目录结构
- 发布流程冗长:复制粘贴、格式调整、图片处理等多个步骤
- 文件命名不一致:需要手动生成 SEO 友好的文件名
解决方案优势
- ✅ 一键发布:通过快捷键或命令面板直接发布
- ✅ 自动格式转换:YAML → TOML 前置数据自动转换
- ✅ 智能图片处理:自动查找、移动并转换为 Hugo AMP 格式
- ✅ 文件名优化:基于 Obsidian 文件名生成合适的博客文件名
- ✅ 预览集成:发布后可直接启动本地 Hugo 服务器预览
系统架构
我们的解决方案包含三个核心组件:
核心实现
1. Node.js 转换脚本
首先,我们需要一个核心转换脚本来处理 Obsidian 笔记到 Hugo 文章的转换:
|
|
2. QuickAdd 宏脚本
接下来是 Obsidian QuickAdd 宏脚本,这是用户界面的核心:
|
|
安装和配置
1. 准备工作
首先确保你已经安装了以下软件:
- Node.js (v14 或更高版本)
- Hugo 静态网站生成器
- Obsidian 和 QuickAdd 插件
2. 脚本配置
-
将转换脚本保存为
obsidian-to-hugo.js -
确保脚本具有执行权限:
1chmod +x obsidian-to-hugo.js -
在你的
package.json中添加转换命令:1 2 3 4 5{ "scripts": { "convert": "node scripts/obsidian-to-hugo.js" } }
3. QuickAdd 配置
-
在 Obsidian 中打开设置 → 社区插件 → QuickAdd
-
点击"管理宏" → 创建新宏
-
名称: “发布到 Hugo 博客”
-
脚本: 粘贴上面的宏脚本代码
-
更新脚本中的路径配置:
1 2const BLOG_ROOT = "/path/to/your/hugo/blog"; // 你的博客目录 const SCRIPT_PATH = "/path/to/obsidian-to-hugo.js"; // 脚本路径 -
返回 QuickAdd 设置,添加新选择:
- 类型: 宏
- 名称: “📝 发布到博客”
- 宏: 选择刚创建的宏
-
启用选择并分配快捷键(推荐:
Ctrl+Shift+P)
使用方法
发布文章
- 打开笔记: 在 Obsidian 中打开要发布的笔记
- 触发宏: 使用以下方式之一:
- 按下分配的快捷键(例如
Ctrl+Shift+P) - 打开命令面板(
Ctrl+P)输入 “QuickAdd: 📝 发布到博客” - 点击 QuickAdd 工具栏按钮
- 按下分配的快捷键(例如
- 确认发布: 在弹出的对话框中确认发布
- 等待完成: 脚本会自动处理转换和图片同步
- 可选预览: 选择是否启动 Hugo 开发服务器预览
支持的前置数据字段
脚本支持以下 YAML 前置数据字段,并会自动转换为 TOML 格式:
|
|
转换后的 TOML 格式:
|
|
图片处理
脚本会自动处理以下格式的图片引用:
- Obsidian 格式:
![[图片.jpg]] - 标准 Markdown 格式:

图片查找顺序:
- Vault 根目录(推荐 Obsidian 图片存放位置)
- 当前文件相对路径
- 常见附件文件夹(attachments、assets、_resources)
处理后的图片会:
- 自动移动到
static/images/YYYY/MM/DD/目录结构 - 转换为 Hugo AMP 图片格式
- 第一张图片作为特色图片显示在文章开头
进阶功能
命令行使用
你也可以直接使用命令行来转换文件:
|
|
批量处理脚本
创建一个 Shell 脚本来批量处理多个文件:
|
|
自定义内容处理
你可以扩展脚本来处理特定的内容格式,例如:
|
|
常见问题
Q: 图片无法找到怎么办?
A: 确保图片位于以下位置之一:
- Vault 根目录
- 当前文件的相对路径
- attachments、assets 或 _resources 文件夹
Q: 转换后的标题是 “无标题文章”?
A: 脚本会按以下优先级提取标题:
- YAML 前置数据中的 title
- 文件名(人性化处理)
- 文章内容中的第一个标题
Q: 如何自定义图片尺寸?
A: 在脚本中修改 AMP 图片标签的 width 和 height 属性,或者集成 image-size 库自动获取尺寸。
Q: 支持其他静态网站生成器吗?
A: 当前脚本专为 Hugo 优化,但可以很容易地修改以支持 Jekyll、Gatsby 等其他生成器。
总结
这套 Obsidian QuickAdd 与 Hugo 博客的集成解决方案极大地简化了从笔记到博客的发布流程。通过自动化的格式转换、图片处理和文件管理,让你能够专注于内容创作,而无需为技术细节分心。
关键优势包括:
- 无缝集成: 直接在 Obsidian 中完成发布,无需切换工具
- 智能处理: 自动处理格式转换、图片同步、文件命名等繁琐任务
- 灵活配置: 支持自定义路径、作者信息、图片处理规则等
- 可扩展性: 可以根据需要添加更多功能和自定义处理逻辑
希望这个方案能够帮助你构建更高效的写作和发布工作流!如果你有任何问题或改进建议,欢迎交流讨论。