本指南介绍如何使用 post_waver 的 Hexo 同步功能,将内容自动同步到 Hexo 博客。
blog/ 目录存在且为有效的 Hexo 博客_config.yml 中的 permalinkpnpm scan 生成 content-index.json如果还没有 Hexo 博客,可以选择以下方式之一:
# 将现有的 Hexo 博客链接为 blog/ 目录
ln -s /path/to/your/hexo/blog ./blog
# 在项目根目录创建新的 Hexo 博客
hexo init blog
cd blog
npm install
# 扫描 content/posts/ 并生成索引
pnpm scan
输出示例:
[LinkOrchestrator] Generating relationships for 4 posts...
[LinkOrchestrator] Relationship generation completed
✅ 扫描完成:
- 总文章数: 4
- 新文章: 0
- 已更新: 0
# 同步文章和图片到 Hexo 博客
pnpm sync:hexo
输出示例:
📖 正在读取内容索引...
📖 正在读取 Hexo 配置...
📋 使用 permalink 格式: :year/:month/:day/:title/
📊 找到 4 篇已发布文章
📷 正在同步图片资源...
✅ 图片资源同步完成
✅ 已同步: test-post-3
✅ 已同步: test-post-2
✅ 已同步: test-post-1
✅ 已同步: example-post
📊 同步完成:
- 成功: 4 篇
# 启动 Hexo 开发服务器
cd blog
npx hexo server
访问 http://localhost:4000 查看效果。
同步脚本会自动读取 blog/_config.yml 中的 permalink 配置,并生成正确的链接。
# 日期 + 标题(推荐)
permalink: :year/:month/:day/:title/
# 示例 URL: /2026/04/01/test-post-1/
# 仅文件名
permalink: :title.html
# 示例 URL: /test-post-1.html
# 分类 + 标题
permalink: posts/:title/
# 示例 URL: /posts/test-post-1/
# 年份 + 标题
permalink: :year/:title/
# 示例 URL: /2026/test-post-1/
注意:修改 permalink 后,需要重新运行 pnpm sync:hexo 更新链接。
同步脚本会自动为每篇文章注入关联信息,包括:
基于发布时间顺序的上一篇和下一篇:
## 相关阅读
**相邻文章**:
- [上一篇: Vue.js 实战](/2026/03/30/test-post-3/)
- [下一篇: React 开发指南](/2026/04/02/test-post-2/)
基于语义相似度的 Top 3 相关文章:
**推荐阅读**:
1. [Vue.js 实战](/2026/03/30/test-post-3/) - 相似度 67%
2. [React 开发指南](/2026/04/02/test-post-2/) - 相似度 67%
3. [示例文章](/2026/04/02/example-post/) - 相似度 41%
相似度计算:
LinkOrchestrator 计算同步脚本会自动将 content/assets/ 目录同步到 blog/source/assets/:
content/assets/images/ → blog/source/assets/images/
content/assets/files/ → blog/source/assets/files/
content/assets/audio/ → blog/source/assets/audio/
content/assets/videos/ → blog/source/assets/videos/
在 Markdown 文章中引用本地图片:
<!-- 使用绝对路径(推荐) -->

<!-- 相对路径也可以工作 -->

路径规则:
/assets/images/ - 相对于 Hexo 的 source/ 目录/assets/images/your-image.png同步后验证图片是否正确复制:
# 检查图片是否已同步
ls -la blog/source/assets/images/
# 在 Hexo 开发服务器中测试
curl -I http://localhost:4000/assets/images/your-image.png
# 应返回 HTTP/1.1 200 OK
症状: 浏览器中图片显示为 404 Not Found
原因: Hexo 开发服务器在图片同步之前启动,没有重新加载资源
解决方案:
# 1. 停止 Hexo 服务器(Ctrl+C)
# 2. 清理并重新生成
cd blog
npx hexo clean
npx hexo generate
# 3. 重新启动服务器
npx hexo server
症状:
点击关联链接后 URL 变成嵌套路径,如 /2026/03/30/test-post-3/2026/04/01/test-post-1/
原因: 使用了旧版本的同步脚本,生成的是相对路径
解决方案:
# 重新同步(新版本使用绝对路径)
pnpm sync:hexo
如果问题仍然存在,检查代码版本:
git pull # 确保使用最新代码
pnpm build # 重新构建
症状:
❌ Blog 目录不存在!
💡 请先设置 Hexo 博客:
方式1: ln -s /path/to/your/blog ./blog
方式2: hexo init blog
解决方案:
选择以下方式之一:
ln -s /path/to/your/hexo/blog ./blog
hexo init blog
cd blog
npm install
git submodule add <your-blog-repo-url> blog
症状:
❌ 索引不存在,请先运行 pnpm scan
解决方案:
# 扫描内容并生成索引
pnpm scan
# 验证索引文件是否存在
ls -la content-index.json
症状:
修改了 _config.yml 中的 permalink,但同步后的链接没有变化
原因: 同步脚本缓存了旧的配置,或者没有重新同步
解决方案:
# 1. 重新同步(会重新读取配置)
pnpm sync:hexo
# 2. 验证链接是否更新
grep -A 10 "相关阅读" blog/source/_posts/*.md
当前行为: 设计上会同步所有文章(包括草稿),以便在 Hexo 中预览
如需过滤草稿:
可以修改 scripts/sync-to-hexo.ts 中的过滤逻辑:
const publishedPosts = Object.values(index.posts).filter(post => !post.draft)
如果只想同步特定文章,可以修改同步脚本添加过滤条件:
// 示例:只同步特定标签的文章
const taggedPosts = publishedPosts.filter(post =>
post.tags.includes('hexo')
)
如果想要自定义关联信息的显示格式,可以修改 packages/core/src/link-injector.ts 中的 injectRelatedLinks 函数。
# 完整的工作流程
pnpm scan # 1. 扫描内容
pnpm sync:hexo # 2. 同步到 Hexo
cd blog && npx hexo clean && npx hexo generate # 3. 生成静态文件
pnpm sync:blog # 4. 提交到博客仓库(可选)
如有问题或建议,请: