hexo 博客更新

写在前面

距离上一篇文章【hexo 博客搭建】已经过去了两年多,在这期间 hexo 给我的使用体验很好,没出什么渲染上的乱子。不过随着 hexo 和 next 主题的升级,某天当我迁移 hexo 到新电脑上的时候突然发现原来的配置文件没法正常使用了,于是开始断更博客 (主要还是懒) 。这两天趁着摸鱼把博客用最新版的 hexo 和 next 重新搭了一遍,期间参考我自己写的文章,发现不少配置和插件都发生了变化,在这里记录一下。

hexo: 5.4.0 -> 5.4.2

hexo-theme-next: 7.8.0 -> 8.16.0

npm install -g 的问题

默认的 npm install -g hexo-cli 需要 root 权限(nt),npm install -i hexo-cli 是装在当前目录(随地拉屎)。可以在 shell 配置文件中加入如下内容

1
2
export PATH=$PATH:$HOME/.npm/bin
export npm_config_prefix=$HOME/.npm

然后 npm install hexo-cli 会安装到 ~/.npm/ 目录下,完美解决问题。

评论系统的变化与选择

评论系统去掉了 valine,增加了 utterances。不巧,我原来一直用 valine,现在要换一个了。

排除掉国内的 changyan,剩下两类 disqusgithub issue。选择了原始的 disqus,发现配置很方便,只要填入一项配置信息 shortname 即可。

图床 vs assets

之前在文章中插入图片需要把每张图片提前上传到图床,再将文章中对应图片的地址替换为图片在图床中的链接。这样操作有诸多不变,我列举三点:

  1. 寻找合适的图床不容易,自建图床维护成本高

  2. 手动替换链接不方便,写作软件自动替换丢失原有图片映射关系

  3. 图床链接失效后需要重传图片、更新链接

这次更新博客过程中已经发现不少图床的链接挂掉了(当然用的是免费图床)。配置 hexo 的过程中看到有一项配置是 post_asset_folder 引起了我的注意,查了一番文档,发现可以将照片作为 asset 随文章一同 post。配置过程如下。

_config.yml 中,设置 post_asset_folder: true

理论上,现在就配置成功了。使用 hexo new post xxx 的时候会同时创建 source/_posts/xxx.mdsource/_posts/xxx/,如果想在 xxx 中插入一张图片 1.jpg,只需将 1.jpg 放在 source/_posts/xxx/ 目录下,并用正常的 markdown 语法插入 ![](1.jpg)。hexo 的默认渲染器 hexo-renderer-marked 会将 ![](1.jpg)1.jpg 替换为 /public/path/to/xxx/1.jpg

不过现在还有两个问题,一是 1.jpg 并不是常规的相对路径,本地的编辑器无法正常解析;二是由于我使用 hexo-theme-next 中的 mathjax,已经卸载了 hexo-renderer-marked,没人给我做路径替换了。

搜索一番,找到了插件 hexo-asset-img,可以完美解决以上两个问题。只需安装该插件即可 npm install hexo-asset-img --save

对于博客链接的思考

之前的文章均使用 hexo-abbrlink 生成,好处显而易见,一篇文章的永久链接永远不会变,经过第一次计算后以元数据的方式保存在 markdown 文件的 yaml 头,同时使路径更浅(默认文章路径为 :year/:month/:day/:title/)。不过导致了另一个问题:生成的永久链接是无意义的。

权衡链接不变、链接深度与链接表意,我还是使用了 hexo 自带的路径设置组合 :year/:title/。在我不改变文章文件名和 :year/:title/ 设置本身的情况下,永久链接就不会变,同时保证较浅(二层)的深度。

这样的设定需要我对文章的文件名进行更精细的命名管理,因为它们会直接作为文章永久链接的一部分。

https://hexo.io/docs/permalinks

不用自己实现友链了

在上一版的 hexo 博客中,我使用自定义页面和一些奇怪的技巧实现了友链。不过在翻 next 文档的时候,发现了 link-grid 这个好东西。使用 link-grid 实现友链,只需一个正常的 source/links/index.md 文件即可。文件正文添加如下内容实现友链

1
2
3
4
{% lg /images/avatar.gif %}
name | link | description | avatar-link
name | link | description | avatar-link
{% endlg %}

放弃 hexo-auto-excerpt

这个插件似乎很久没有维护了。之前的使用感受也一般,它会将摘要内容渲染得乱七八糟,且完全没有换行。还是在文章中手动加 <!-- more --> 吧,还能选择合适的切断位置。

关于 hexo-douban

之前在使用中发现作者放弃了维护,也逐渐出现了一些问题,比如 pjax 开启时不能正常加载的问题。这次又去看了一眼,发现作者重新开始维护了。不过我还没打算重新启用。

https://github.com/mythsman/hexo-douban

发现的一些其他有用的东西

https://theme-next.js.org/docs/tag-plugins/group-pictures.html

可以用来做相册

https://theme-next.js.org/docs/tag-plugins/mermaid.html

可以画各种关系图

https://theme-next.js.org/docs/tag-plugins/pdf.html

可以在文章中插入 PDF 附件

https://github.com/D0n9X1n/hexo-blog-encrypt

可以对文章内容进行加密

TODO

  • 添加留言版
  • 添加个人介绍
  • 添加相册
  • 博客美化
  • ...