小刻也能看懂的Obsidian2Hexo发布脚本
前言
最近重构了一下笔记库方案,顺便也想着要不一起把博客架构也重构一下,以前是直接拿的脚本复制过去,附件也复制到附件文件夹,然后生成博客再部署,这样耦合度很高,现在思考了一下,不如把数据和代码分离,再用脚本将其桥接。这样灵活度也高,以后要是不用Hexo了还可以很方便的更换博客框架。
预处理
全局变量定义
OBSIDIAN_BASE_PATH
- Obsidian 基目录HEXO_BASE_PATH
- Hexo 基目录
数据对象定义
对于 Hexo Butterfly主题而言,标准博客markdown meta一个是这样的
1 | --- |
所以我们可以轻松的封装为 HexoButterflyBlog
类。不过为什么要封装呢,那是因为,实际上我的markdown文章并不一定就有这些meta,也可能是如下情况:
1 | --- |
这是我通用的markdown格式模板,这时候就需要一些适当的转换了,这也是封装的意义。
方法定义
Markdown 解析并封装
主要逻辑就是对某个md文件进行操作,提取meta信息,body,dir_name,file_name 等并封装到 这个对象 HexoButterflyBlog
中。
Blog对象初始化
上面已经拿到了 解析后的 blog对象了,然后可以对其进行操作了,对其meta字段进行操作:
- 先注入标准字段,如果有该字段则跳过,然后对其余的meta数据进行操作
- 遇到诸如我自己使用的meta,则将其转换为对应的 标准字段
- 然后对文件名进行hash,如果遇到诸如
link
等特殊file_name则不hash(进入特殊逻辑) - 然后处理时间,如果标准格式的时间字段已经有值了,则跳过,如果无值,则使用文件创建时间
- 继续按自己要求初始化字段
Obsidian遍历逻辑
前面已经定义了 Obsidian路径基 和 Hexo路径基,现在我们处理遍历逻辑,从 Obsidian路径基 开始,递归的遍历所有文件,但是当如果所在的文件夹具有特殊文件 .noscan
时,则不扫描该文件夹。
Markdown还原逻辑
很简单,我们已经保存了其meta信息和body信息,反向的组装就好,这个方法应该输入一个路径(文件夹路径)作为参数,然后在该参数路径下生成markdown文件,其名称应该为file_name字段。
转换并生成对应Hexo架构逻辑
现在我们拿到了所有 md_path 并封装进入List中, 对其遍历处理,每个path提取为 blog 对象,然后转换到Hexo架构,规则如下:
- 如果 dir_name 字段为 “博客” 则将其还原到 `source/_post/ 文件夹中(按照Hexo约定)
- 如果 dir_name 为 “Hexo路径基” 则进入特殊逻辑
如果 file_name 为类似 ‘link’ 这样的特殊文件,则复制到到source/
中 - 如果 dir_name 字段为 其他内容 则在
source/
中创建对应的文件夹,并存放到该文件夹中。
收尾工作
最后加上逻辑进入 Hexo基目录,然后执行hexo update 命令,即可。