0050 一键发布博客

各种静态博客生成器用的都是 Markdown 格式的文件,如果把这些内容引入 Obsidian 进行管理是十分合理的。

最简单

mklink 把笔记中的某个文件夹软连接到博客生成器的文章文件夹。然后用 Shell commands 或者 QuickAdd 运行博客构建与部署命令即可。

瞎折腾

我就搞得很复杂(没必要)了。

内容多

一个原因是我已经有了一大堆的内容,但格式不符合各种生成器的要求。比如创建日期我用的 created,而 hexo 要求的是 date。当然,批量替换就行了,但我不希望同时维护两个字段,也不想改变笔记这边的使用习惯。

UUID

最近了解了 Advanced URI 的思路,给每篇笔记一个唯一的 id(UUID),我觉得不错,想给笔记加一个,然后博客里的文章也用这个唯一 id,这样我就可以凭此对应文章和笔记了。然后回到上面问题,我已经有一大堆内容了,Advanced URI 不能一键给所有笔记添加 id。

然后我写了个插件给所有笔记添加 id 字段。没啥用,但是很折腾的操作。Obsidian 没给啥插件开发文档,就凭直觉吧。提示,在控制台输入 app 回车,可以获得一堆有用信息,差不多都是基于这个对象的操作。插件就不发布了,估计也没人需要,并且 Advanced URI 插件也随时可能增加这个操作。

当然后续创建的笔记借助模板来添加这个字段就行了。

选程序

原本想用 hugo 的,它快啊!但是好复杂,我不想那么折腾,然后就选择了慢悠悠的 hexo,反正没所谓的,简单就行。两百篇内容生成大概一分钟……坏诶!

复制内容

道理上把笔记复制过去就对了,但是我要求比较复杂:

  • 只发布特定标签的内容
  • 链接用 UUID,这就得设置固定链接,或者把文章用 UUID 作为名称储存,我选择了后者
  • 要添加 title 信息,毕竟不能靠文件名获取标题了
  • 修改 createddate
  • 整理文章内的换行(我知道有 Markdown 插件,但是有的文章里面有刻意的不规范格式,这个还得后续检查一遍)
  • 我有一些笔记的信息写在 front matter 里面,得复制到内容里,不然没法显示

所以又写了个插件,读取所有笔记,根据标签筛选,处理内容,然后用 id 字段的值作为文件名存储。

减少工作量

维护了一个 update. Json 文件,记录每个 id 的笔记对应的更新时间,如果这个时间没有变化,就不复制了(那边已经有了)。

然后再加一个强制更新命令,就是不检查更新时间了,一律复制过去。

发布

清理,生成,部署。

每次都清理 hexo clean 可以避免一些问题。

部署我用的 git,设置了一个 token,因为我用 ssh 证书有时候搞翻车,用 token 比较稳定无脑。

细节

加了 hexo-blog-encrypt 插件,因为有一些付费内容需要加密隐藏一下。但这个插件有点挑主题。

问题

强制更新前应该先清理文章文件夹,否则没法实现移除文章,要是想弄得完善点,得加几个函数遍历删除。

附件问题。博客弄好了,图床炸了。反正图片也不重要,倒是不打紧,只是发布出来难看点。但如果加入附件的复制,就得再查询文章中引用的资源,复制资源,修改文章中的引用地址。又是一大坨代码。

一点点完善吧,然后再做补充。随着博客的发布,一些陈年内容也得好好的整理一番了。

这部分折腾的代码也不放出了,不可能有人有完全相同需求,暂时我又懒得做设置项,而且一些细节的东西也不好靠设置来控制。