Hexo 手记

起始

本想自己写个博客,也挖了几个坑。切身体会到这不是个技术活。我打算先让它跑起来。为了兼容性和移植性我需要一个支持 Markdown 的静态生成器。

以下文章针对不用图床的情况。编辑器使用 Typora,针对几个问题用脚本修正。

Hexo

简单看下功能

博客方面,Hexo 支持 标签、归档、分类、搜索、订阅

框架上,支持自定义主题,web 服务器,插件

主题上,可以自定义显示的组件,一些主题会支持社交媒体和评论。一些可以配置各种站点统计。

功能全面,资源还算丰富,可能需要改一改就能用了,我当时这样想。

服务搭建

按照 Hexo 的文档搭建,修改 _config.yml 配置,一路还是很顺畅的。我这里提一些文档和主题可能说不到的地方。

Hexo 默认是没有 search、tags 和 categories 页面的,需要用 hexo new page <tags / categories> 手动创建,然后修改对应文件夹里的 index.md,增加 type 参数,值位对应的带引号的 “search”,”tags” 或 “categories”

比方说 tags/index.md,写成这样:

1
2
3
4
5
---
type: "tags"
title: 标签
---

type 参数必须要有,一些主题文档可能会写更改这些文件但没有 type。

RSS 功能是插件 hexo-generator-feed 提供的,主题不一定会适配 RSS 功能。我的做法是在 nav 中加了 RSS 指向 /atom.xml

Hexo serve 只监听到文章文件变化,不监听主题和配置文件的变化。

有些主题很老,部署后会出很多问题,建议不要浪费太多时间调试主题,不能用就换。

写作

编辑器

有一个后台管理插件:**hexo-admin** 可以在 Hexo serve 中使用。配置时注意,password_hash 是一个 bcrypt hash,rounds 不要太高(超过10),不然 login 超级慢。hexo-admin 的问题有:只支持将图片放到 source/images 的模式。支持从剪切板粘贴截图,但格式是 png。粘贴图片比较慢但还能接受。对于文章,只支持标题、标签、分类、正文,好像不支持修改时间。

我想保留图片文件和 md 文件的关联,使用 Hexo 配置里的 post_asset_foldertrue,我选择用平时常用的 Typora,并把图像设置改成 复制到指定路径,值为./${filename},这样就和 Hexo 的图片管理一样了

图片管理

虽然 Hexo 可以管理文章同名的文件夹下的图片,但是生成文件后图片文件和 HTML 文件在相同目录,也就导致在 Typora 中写的图片路径失效了。看来 Hexo 给出 post_asset_folder 方案的时候并没有考虑如何管理图片资源。

要想 Typora 和 Hexo 完美配合,需要修改 Hexo 生成 HTML 文件时图片的路径,有两种方案:

1、改 Hexo 源码,检测图片路径,并做相应替换。

2、写个脚本,每次生成文件前先替换掉本地文件路径。

因为改代码以后不方面升级,选择用脚本解决。

Front-matter

Hexo new 创建的文件是这样的

1
2
3
4
5
---
title: 'test'
date: 2022-01-11 19:35:30
tags:
---

没有更新日期,更新日期默认为文件修改时间。因为要搞多端同步和备份,我不希望修改时间被改来改去,接下来写个脚本生成这个时间。

没有 categories 参数,它和tags参数一样需要跟一个列表,而Front-matter信息在 Typora 中是没有语法检查的,这里也用脚本生成。

如果标题中有特殊符号,会引发 YAMLException,因为元信息是 yaml。

参照:https://segmentfault.com/a/1190000021735407,解决方法是标题加引号。

文件管理

因为 Hexo 的图片管理无法直接与 Typora 衔接,所以文章单独做一个 git 库,Hexo 的配置和脚本单独做一个库。

粘贴剪切板截图

目前见过的 Markdown 编辑器直接粘贴截图会被保存为 png,Typora 的话是 PNG-24(无法粘贴截图的编辑器还是建议换一换)。自己电脑存储还是以方便为主;放网上的话还是小点比较好。

过去我的经验一直是 png 比 jpg 要大,实际上细节越丰富,jpg 的体积优势越大(十倍以上),但越是简单的图 png 却越小(比 jpg 小3倍)。我取个中,全转 webp(两种情况下都比他俩小,笑)。这个功能一起加到脚本里。

其他资源

音频和视频在 Typora 中是 audio 和 video 标签,保留原内容修改引用路径复制到对应文件夹。

附件引用比图片少前边的叹号,同样修改路径后复制过去。

其他

为了节省资源,先对比文件的 md5,再决定是否需要重新生成和复制。

原生的 video 和 audio 标签没有控件,增加 controls 属性显示控件。

结尾

过程中用到的脚本:

  • migrateAssets.py 批量移动 ${filename}.assets 文件夹中的内容到 ${filename},并替换 md 文件中的内容。如果你的 Typora 的图像配置是 ${filename}.assets,可以使用这个脚本更新至 ${filename}
  • new.py [fileName] 创建新文章的脚本,根据提示输入标签和分类,空格分割
  • replaceLocalPath.py 将 Typora 写的 md 中的本地文件链接转换成 Hexo 能用的链接
  • updated.py [fileName] 更新文章的更新时间

本作品采用 知识共享许可协议 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。