前言

最近重构了一下笔记库方案,顺便也想着要不一起把博客架构也重构一下,以前是直接拿的脚本复制过去,附件也复制到附件文件夹,然后生成博客再部署,这样耦合度很高,现在思考了一下,不如把数据和代码分离,再用脚本将其桥接。这样灵活度也高,以后要是不用Hexo了还可以很方便的更换博客框架。

预处理

全局变量定义

  • OBSIDIAN_BASE_PATH - Obsidian 基目录
  • HEXO_BASE_PATH - Hexo 基目录

数据对象定义

对于 Hexo Butterfly主题而言,标准博客markdown meta一个是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
---
title:
date:
tags:
categories:
keywords:
description:
top_img:
cover:
copyright_author:
copyright_author_href:
copyright_url:
copyright_info:
---

所以我们可以轻松的封装为 HexoButterflyBlog 类。不过为什么要封装呢,那是因为,实际上我的markdown文章并不一定就有这些meta,也可能是如下情况:

1
2
3
4
5
6
---
笔记: "{{date}}"
摘要:
tags:
- TODO
---

这是我通用的markdown格式模板,这时候就需要一些适当的转换了,这也是封装的意义。

方法定义

Markdown 解析并封装

主要逻辑就是对某个md文件进行操作,提取meta信息,body,dir_name,file_name 等并封装到 这个对象 HexoButterflyBlog 中。

Blog对象初始化

上面已经拿到了 解析后的 blog对象了,然后可以对其进行操作了,对其meta字段进行操作:

  1. 先注入标准字段,如果有该字段则跳过,然后对其余的meta数据进行操作
  2. 遇到诸如我自己使用的meta,则将其转换为对应的 标准字段
  3. 然后对文件名进行hash,如果遇到诸如 link 等特殊file_name则不hash(进入特殊逻辑)
  4. 然后处理时间,如果标准格式的时间字段已经有值了,则跳过,如果无值,则使用文件创建时间
  5. 继续按自己要求初始化字段

Obsidian遍历逻辑

前面已经定义了 Obsidian路径基 和 Hexo路径基,现在我们处理遍历逻辑,从 Obsidian路径基 开始,递归的遍历所有文件,但是当如果所在的文件夹具有特殊文件 .noscan 时,则不扫描该文件夹。

Markdown还原逻辑

很简单,我们已经保存了其meta信息和body信息,反向的组装就好,这个方法应该输入一个路径(文件夹路径)作为参数,然后在该参数路径下生成markdown文件,其名称应该为file_name字段。

转换并生成对应Hexo架构逻辑

现在我们拿到了所有 md_path 并封装进入List中, 对其遍历处理,每个path提取为 blog 对象,然后转换到Hexo架构,规则如下:

  1. 如果 dir_name 字段为 “博客” 则将其还原到 `source/_post/ 文件夹中(按照Hexo约定)
  2. 如果 dir_name 为 “Hexo路径基” 则进入特殊逻辑
    如果 file_name 为类似 ‘link’ 这样的特殊文件,则复制到到 source/
  3. 如果 dir_name 字段为 其他内容 则在 source/ 中创建对应的文件夹,并存放到该文件夹中。

收尾工作

最后加上逻辑进入 Hexo基目录,然后执行hexo update 命令,即可。