Hugo | 一个(些)静态博客的后端写作方案

2577字

大家好我又来了

……其实Blog没人看,所以没有什么大家,但这么说比较好开头一点。

昨天说到了新的折腾项目,今天我还在琢磨这个事,问题主要在于,虽然静态博客编辑器可以用,但它编辑器实在长得太难看,又不开源,没办法自己改一改,我总纠结是不是可以再折腾折腾……就算折腾不出来更好的解决方案,能多几个挑挑总是好的嘛!

而且理论上来说,Github API提供了写入和修改的权限,Github APP可以控制具体允许读取的仓库,找一个能支持以上功能的编辑器就万事大吉……理论上来说。

最后的结局不算非常圆满,是一个好用和不好用,有没有必要用的波粒二象性,但至少确实是有不同方案可挑了。


方案一:Headless CMS

什么是Headless CMS?,我自己理解的话,CMS是内容管理系统(好熟悉的造词,上个月我是不是学过差不多的,比如Git是版本管理系统?),可以用来建站,而Headless CMS是将本来捆绑在一起的前后端分离开,于是我们可以单独使用它提供的后端来联结已经写好的前端程序。

……说起来怪复杂的,其实用起来就是一个不需要自购服务器也可以用的后端,里面的一些可以读取仓库并将其中的内容可视化为面板管理界面,于是写作和修改草稿都可以在线上进行,发布后文件被写入到Github仓库中,之后的编译和发布就交给CI/CD


Forestry.io

我翻了翻,可选项之一是Forestry.io,一个在标题上就写了“基于Git的CMS服务,服务于Hugo、Next.js、Gatsby……”——不好复制,我乱译的,你看,甚至第一个就是Hugo呢。

使用起来非常简单,Github登录,选Blog框架,点击确认给它读仓库和写仓库的全部权限,如果是隐私仓库的话,再给它隐私仓库的读取和写入权限,噼里啪啦一阵下一步,就能看到一个相当美观的管理界面,之后设置一下FrontMatter模板,就可以直接写了。

以及我发现Hugo文档中就有对Forestry的展示,人在舍近求远上总是会花费很大精力。


优点: 用起来简单,不需要任何命令行,达力来了也会用。拿被墙检测看了看是说存活,用手机登了登访问速度似乎还行。支持草稿功能,支持Hugo server效果的预览功能,最惊喜的是它甚至支持Cloudinary图床,只需要简单配置就可使用,使我换图床之心受到了极大打击。

缺点:自带的Markdown编辑器很奇幻:它是一个支持绝大部分Markdown语言的所见即所得编辑器,但它不支持在所见即所得模式里写链接引用……换成源代码编辑器就可以了,作为一个喜欢在文章里插入大量引用链接的人,用得很迷茫……


需要注意的配置

时区:Forestry默认时区为UTC时间,更改时区需要在Setting中修改Timezone为+08:00——但好像改了也没什么用,发布后最后修改时间还是显示了一个+0000,非常神秘,因为理论上这个是Lastmod的显示方式,如果是服务器时间的话应该会显示UTC时区来着。

FrontMatter:Forestry默认的写法应该是Toml,生成后很乱,Title会在最下面,如果想以Yaml方式显示,需要参考文档做法,在站点config.yaml里写入

## Possible options "yaml", "toml" or "json"
metaDataFormat: "yaml"

文件名称:Forestry在Github仓库中生成文件名时并不跟随标题,需要在编辑器右上角点Rename进行单独修改,不想仓库里很灾难的话,强烈建议改这个。


Netlify CMS

另一个方案是使用Netlify自带的CMS服务,具体的使用方法可以参考十分鐘將 Netlify CMS 添加到現有的 Hugo 網站。最终的效果是在原域名上增加一个Admin页,登录后即可进行后台管理。

我本来非常好奇,因为之前做自动部署和网站加速时就是在Vercel和Netlify中二选一,但读了一下流程,操作步骤相对Forestry繁杂很多,并且同样有时区问题存在,会导致我处理好的最后更新时间显示失效。「踩坑」使用 Netlify CMS 遇到的 bug里最后一条问题我也非常在意……最后就马了一堆流程教程……狡兔三窟总是没错的!万一哪天Forestry不能用了我就来用这个。


方案二:在线编辑器

第二个方案:回到开头,我之前想:其实管理与否并不那么重要,需要的只是一个在线编辑器,同时这个编辑器可以向Github仓库写入文件:那为什么不找找有没有支持Git的Markdown编辑器?

当然有,比如阮一峰网站里曾经提到的github.dev,Github官方推出,VS Code 编辑器Web 版;以及GitNote,看文档介绍说“支持 git 的全部特性,并且不依赖本地 Git 环境”,也可以用来做编辑器;同样的还有MarkIdea,一个开源免费的Github云笔记。感觉同样需求的编辑器应该挺多的,查到不少使用Github来做个人笔记的经验文章,我一边看一边剧烈心动。


总结下“工作流”

……这个词真的好专业,我一边打出来一边在心里犯嘀咕:应该没用错吧?

总之目前的倒腾结果,是静态博客可以在线上写并发布了:在Forestry上在线写作,保存后Forestry写入Github仓库,触发Github Action进行自动部署,半分钟后上线网页。全程不涉及命令行和代码,也只需要关注在Forestry上写作这一环节。我自己还挺开心的!五十天前我还在苦兮兮地往命令行里敲Git命令呢!平均三行里写错一行再花两个小时抢救,五十年河西了!

不过我感觉Forestry的编辑器是难用了一点,所以这一套流程也可以换成在其他好用的编辑器上写,然后复制粘贴到Forestry上发一下,写到这里我又在疑惑了,我为什么不直接用Github写呢,我都解决国内访问了,用Forestry和用Github有什么本质区别吗……


讲个冷笑话

之前是不是有说过,就是我是一个习惯一边在Typora里写一边开着Hugo Sever看预览的人,由于Hugo是实时刷新显示,这件事除了闪屏有点瞎以外,还挺丝滑流畅乐趣无穷的。但使用LeanCloud就会出现一个问题:本地预览它也刷API接口,所以前段时间没发现的时候,我的Waline API请求直逼六千……

虽然理论上也没什么问题,LeanCloud给的免费API请求限额是开发版每天三万次呢,但时不时看过去还是有点心惊肉跳的。

使用Forestry后这个问题就解决了,因为它预览比较像Hexo,更新后要再点一下预览键。

……我承认这有点冷笑话啦!!!但就是很想讲出来!!!