注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用
其实在最开始计划的时候,第一篇文章应该是另外一个主题,但是每次开始写文章的时候都忍不住去折腾一下博客(又可以水两篇文章了)
在准备写文章的时候发现 hexo 在文章多了之后管理上很不方便,现在博客也已经有了 150+ 博文了,所有的文章都放在了 _posts 文件夹下面

如上图所示,虽然文章按照分类拆分了文件夹进行管理,但是还是不是特别清晰,毕竟不是所有的文章都是专题文章,还是有一部分笔记或者是其他文章的,在 hexo 中我们给文章分配了标签分类等字段用来区分,但是在实际的文件管理上还是不行
之前还在用语雀记录笔记的时候,文章是直接放在了 语雀 上然后通过 yuque-hexo + github actions 自动发布,但是后面将笔记切回 notion 之后,就没用语雀同步了。

可以看到上图,语雀的文章本身是没有其它额外的属性的,所以我们为了支持 hexo 的 yaml frontmatter 就做了一些额外的约定和处理,但是在 notion 的 database 里面这个问题就不存在了,刚刚好可以完美的解决这个问题

ok, idea 有了之后,我们大概想想方案,我大概调研了一下现在存在的主要方案大概可以分为三种
第一种就是,使用 notion database 作为 baas 后端,另写前端页面来获取数据渲染,这种方案的典型代表是 nextjs-notion-starter-kit
这种方式的主要问题是,在国内的加载速度和不确定性的问题,因为国情原因,notion 访问本身比较慢,并且还存在一些不确定性
第二种和第一种类似,但是第二种方案可以直接生成静态页面,所以就有着和静态博客一样的速度和灵活性,我们可以直接部署在国内。这种方法的典型方式是 Gatsby+Notion
这种方式的主要问题是主题不够丰富,大概率需要自己修改很多东西才能用,和成熟的 hugo、hexo 比,差的有点太多
第三种方案就是将 Notion Page 转换为 Markdown 文件,然后就可以直接使用 hugo、hexo 等成熟的静态博客生成器了
这个的主要问题是虽然现在 notion 官方开放了 api,但是没有 api 可以直接将 notion 的数据结构之间转换为 markdown,现在虽然有一些第三方库(例如 notion2md )支持,但是存在着各种各样的问题,要么不支持图片,要么不支持 table 等格式,总是会欠缺一些
经过对比,和当前遇到的问题,我选择了第三种方案,然后自己造个简单的转换轮子
ok,思路有了,我们看一下最后的方案

status 字段,当 status 为 待发布 的时候我们才去下载对应的文章,文章下载完成之后,我们就把这篇文章的状态修改为 已发布img 目录下具体代码就不贴了,也没有几行,看下最后的成果就行了(这篇文章就是)我们使用 github action 作为流水线组件,现在我们的工作流就变成了
1 | |
相关仓库 & 示例如下
1 | |
注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用
其实在最开始计划的时候,第一篇文章应该是另外一个主题,但是每次开始写文章的时候都忍不住去折腾一下博客(又可以水两篇文章了)
在准备写文章的时候发现 hexo 在文章多了之后管理上很不方便,现在博客也已经有了 150+ 博文了,所有的文章都放在了 _posts 文件夹下面

如上图所示,虽然文章按照分类拆分了文件夹进行管理,但是还是不是特别清晰,毕竟不是所有的文章都是专题文章,还是有一部分笔记或者是其他文章的,在 hexo 中我们给文章分配了标签分类等字段用来区分,但是在实际的文件管理上还是不行
之前还在用语雀记录笔记的时候,文章是直接放在了 语雀 上然后通过 yuque-hexo + github actions 自动发布,但是后面将笔记切回 notion 之后,就没用语雀同步了。

可以看到上图,语雀的文章本身是没有其它额外的属性的,所以我们为了支持 hexo 的 yaml frontmatter 就做了一些额外的约定和处理,但是在 notion 的 database 里面这个问题就不存在了,刚刚好可以完美的解决这个问题

ok, idea 有了之后,我们大概想想方案,我大概调研了一下现在存在的主要方案大概可以分为三种
第一种就是,使用 notion database 作为 baas 后端,另写前端页面来获取数据渲染,这种方案的典型代表是 nextjs-notion-starter-kit
这种方式的主要问题是,在国内的加载速度和不确定性的问题,因为国情原因,notion 访问本身比较慢,并且还存在一些不确定性
第二种和第一种类似,但是第二种方案可以直接生成静态页面,所以就有着和静态博客一样的速度和灵活性,我们可以直接部署在国内。这种方法的典型方式是 Gatsby+Notion
这种方式的主要问题是主题不够丰富,大概率需要自己修改很多东西才能用,和成熟的 hugo、hexo 比,差的有点太多
第三种方案就是将 Notion Page 转换为 Markdown 文件,然后就可以直接使用 hugo、hexo 等成熟的静态博客生成器了
这个的主要问题是虽然现在 notion 官方开放了 api,但是没有 api 可以直接将 notion 的数据结构之间转换为 markdown,现在虽然有一些第三方库(例如 notion2md )支持,但是存在着各种各样的问题,要么不支持图片,要么不支持 table 等格式,总是会欠缺一些
经过对比,和当前遇到的问题,我选择了第三种方案,然后自己造个简单的转换轮子
ok,思路有了,我们看一下最后的方案

status 字段,当 status 为 待发布 的时候我们才去下载对应的文章,文章下载完成之后,我们就把这篇文章的状态修改为 已发布img 目录下具体代码就不贴了,也没有几行,看下最后的成果就行了(这篇文章就是)我们使用 github action 作为流水线组件,现在我们的工作流就变成了
1 | |
相关仓库 & 示例如下
1 | |