Hexo 博客插件的开发

记录一下开发 Hexo 插件过程中的一些笔记。

processor API

Processor | Hexo

Box | Hexo

官方文档年久失修,几乎不能用。

box 的文档中提到提供了 readSync 等方法,这些方法已经不在 box 中了,而是只接在 File 中了。hexo/lib/box/file.ts at master · hexojs/hexo

但是 file 只提供了读取的方法,没有提供写入或者持久化的方法,如果想做持久化,需要自己用 node 的写文件方法实现,或者用 hexo-fs 中的方法。

hexojs/hexo-fs: File system module for Hexo.

由于网上关于 process API 的资料很少,这里展示一下代码大概需要怎么写吧:

1
2
3
4
5
6
// 匹配所有 _posts 目录下的 md 文件,但是不匹配下划线开头的文件
hexo.extend.processor.register(/^_posts(?:\/[^\/]*)*\/(?!_)[^\/]*\.md$/, function (file) {
console.log(file.source)
console.log(file.path)
let fileContent = file.readSync();
});

备注:博主原本是想开发一个在构建之前读取 .md 文件并修改其中一部分内容的插件,由于觉得持久化有可能会导致源文件损坏,感觉风险比较大,所以最后没有采用这个方案。不过读者可以根据上边的代码参考一下 processor API 的用法。

和性能相关的

先后经过 #3671、#3680、#3685,Hexo 在 open_graph() helper、meta_generator filter 和 external_link filter 中用正则表达式替代了 cheerio,并在 hexo-util#137 和 #3850 中将 toc() 所依赖的 cheerio 换成了更快的 htmlparser2。到了 Hexo 4.2,我们从 Hexo 中彻底去掉了 cheerio。

——速度就是关键! —— 我们是如何让 Hexo 4.2 的生成速度提升 30% 的 | Sukka’s Blog

参考文章

  1. 速度就是关键! —— 我们是如何让 Hexo 4.2 的生成速度提升 30% 的 | Sukka’s Blog
  2. 和 cheerio 说再见! - 喵’s StackHarbor
  3. Replace cheerio with native API · Issue #3677 · hexojs/hexo