Obsidian 发布到 Hexo 工作流
📝 Obsidian 发布到 Hexo 工作流
✨ 目标很简单:平时继续在 Obsidian 写笔记,需要发布时,一键导出成 Hexo 能直接使用的文章。
🧠 推荐方案
我建议你走这条路:
- Obsidian 作为主写作端
- Hexo 作为展示端
- 用 frontmatter 控制是否发布、slug、分包、封面图
- 用脚本把笔记转换到 Hexo 的
source/_posts/<分类包>/
这条路的好处:
- 日常写笔记不受影响
- 不需要在 Hexo 和 Obsidian 里重复维护两份内容
- 可以批量同步所有
publish: true的笔记 - 可以先 dry-run 预览落盘位置,再真正发布
🧩 目录建议
你当前笔记库里已经新增了一个发布目录:
hexo-publish/hexo-publish/assets/covers/hexo-publish/publish-note.mjshexo-publish/config.example.json
当前有两份常用配置:
hexo-publish/config.local.json:导出到 vault 内的测试目录hexo-publish/config.deploy.json:导出到HEXO_ROOT/source/_posts
配置里的路径支持占位符,换电脑时不用改脚本:
1 | { |
常用占位符:
${configDir}:当前配置文件所在目录${cwd}:执行命令时所在目录${home}:当前用户主目录${env:HEXO_ROOT}:读取环境变量
✍️ 笔记怎么写
建议每篇准备发布的笔记都加上这些属性:
1 |
|
核心字段说明:
publish: 是否允许导出slug: Hexo 文章链接名package: 文章导出到_posts下的分包路径note_type: 笔记类型,用来保留工具、速查、配置、流程、复盘这套习惯cover: 文章封面图description: 摘要描述
分包规则:
package写了就优先使用,例如技术笔记/开发工具categories第一项是编程学习、大学课程、技术笔记、英语学习时,直接按它作为目录categories是开发工具、工作流、Markdown这类子分类时,自动挂到技术笔记下- 没写
package和categories时,会按note_type或标签推导,最后兜底到技术笔记
🚀 怎么发布
在当前 vault 目录执行:
1 | node .\hexo-publish\publish-note.mjs --config .\hexo-publish\config.deploy.json --hexo-root "<你的 Hexo 仓库路径>" --note ".\Git指南.md" |
如果某次只想给单篇文章临时指定封面,可以加 --cover:
1 | node .\hexo-publish\publish-note.mjs --config .\hexo-publish\config.deploy.json --hexo-root "<你的 Hexo 仓库路径>" --note ".\Obsidian 发布到 Hexo 工作流.md" --cover "hexo-publish/assets/covers/cover-obsidian-hexo-workflow.png" |
先预览所有准备发布的笔记会落到哪里:
1 | node .\hexo-publish\publish-note.mjs --config .\hexo-publish\config.deploy.json --hexo-root "<你的 Hexo 仓库路径>" --all --dry-run |
批量同步所有 publish: true 的笔记:
1 | node .\hexo-publish\publish-note.mjs --config .\hexo-publish\config.deploy.json --hexo-root "<你的 Hexo 仓库路径>" --all |
也可以把 Hexo 仓库路径放到环境变量里,命令会更短:
1 | $env:HEXO_ROOT = "<你的 Hexo 仓库路径>" |
如果文件里没有 publish: true,脚本会跳过。确实要强制导出时再加 --force。
导出成功后,目标文章会出现在:
1 | 你的 Hexo 项目/source/_posts/<package>/<slug>.md |
如果封面图是本地文件,脚本会复制到 Hexo 静态资源目录:
1 | 你的 Hexo 项目/source/img/posts/<slug>/ |
文章 frontmatter 会引用公开路径:
1 | /img/posts/<slug>/<image-file> |
🔄 脚本会帮你做什么
这个脚本当前会做几件事:
- 读取 Obsidian frontmatter
- 把笔记导出为 Hexo frontmatter
- 自动生成或使用已有
slug - 按
package / categories / note_type / tags推导分包目录 - 支持
--all批量发布和--dry-run预览 - 把
[内部链接](//)转成普通 Markdown 链接 - 把
转成 Hexo 能识别的图片引用 - 复制封面图到 Hexo 静态资源目录
- 自动插入
<!-- more -->摘要分隔符
⚠️ 需要你知道的限制
当前这版是轻量实用版,所以有几条边界:
- YAML 解析支持常见简单写法,复杂嵌套暂时不建议
[笔记](//#标题)会转成博客内链接,但前提是对应文章也有 slug- 复杂 Obsidian embed 语法还没有全部兼容
- 当前脚本只处理 Markdown 正文和常见 frontmatter,不负责自动改写复杂插件语法
- 如果封面图写的是本地路径,脚本会复制到对应文章资源目录;如果写的是
https://图片,会保持原链接
🎨 封面图怎么用
我已经给你预留了一类图:
covers/:适合作为文章封面
推荐用法:
- 工具类文章用偏实景、桌面、终端、代码感封面
- 同一系列文章尽量固定 2 到 4 张图循环使用,博客会更整齐
🧭 我建议你的长期用法
最稳的一套是:
- 在 Obsidian 里写完整笔记
- 给准备公开的文章补
publish / slug / package / note_type / cover - 先执行
--all --dry-run看分包是否正确 - 用
--all同步到 Hexo - 在 Hexo 本地预览,没问题再部署
这样 Obsidian 是知识库,Hexo 是展示面,它们分工很清楚。
✅ 常用命令
1 | # 预览所有 publish: true 笔记的导出位置 |
如果在 Hexo 仓库里执行 npm scripts,可以设置一次 vault 路径:
1 | cd "<你的 Hexo 仓库路径>" |
如果不想每次设置环境变量,可以在 Hexo 仓库放一个本机专用配置:
1 | { |
文件名使用 hexo-publish.local.json,它已经在 Hexo 仓库的 .gitignore 里,不会把本机路径提交出去。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shallow Memory's Blog!
评论




