前言
三周年的post更多就是一种形式了,看了二周年的post, 感觉已经把我本人对于博客网的情感表达得较为详尽了,一年过去我并没有对此生发更多的感情了。看到自己在二周年的博客里提到了:
再往后就遇到了那个她,开始在博客上记录自己那股悸动的感觉,因为这种感觉不记录下来的话,就会溺死在往后的岁月里。当时真的从未想过我们会在一起,我感觉就是一个很特别的我喜欢的女孩子,她肯定有很多爱她的人并不渴求我的爱,毕竟牡丹这么多年了,这恋爱观念的惯性可不小。后来,她也看到了这篇博客,就这样,双向奔赴的我们以这种非常浪漫的方式在一起了。从此博客对我的意义,已经不再是可有可无了,是我的生活了。
不过很搞笑的是我写完那篇后过了20天我就失去了她,不过博客与我而言的意义依然没有太大变动,目前依然是我生活的一部分。
关于博客网本身确实每太多好生发的了,我还是主要写写这一年与博客有关的事情吧。
...
Blog Template For New Hexo User
/Pasted_image_20241027192407.png)
本地增添博客内容(markdown文件)->hexo根据文件内容生成网页源码->上通过指令上传(push)到github->github自行部署静态页面
因为oh-my-live2d官网崩了,所以需要自己私有托管一下live2d服务才能让博客网上的小埋复活。(bonus:可以借此尝试自己制作一个live2d形象)
更于9/25,拖着很久没搞,然后官网自己复活了,好好好,直接快进到customized live2d。

因为之前使用gitalk评论系统在国内用不了了,所以尝试更换为一些国内可用的方案。其中一个是国内开发者开发@imaegoo搭建的Twikoo系统
Hexo plugin -- hexo-photo-wall
Why
因为觉得hexo post的图片排版太烂了,手打html插入图片又很烦,于是乎决定写一个hexo的插件,能够通过一些关键字,识别图片组,然后再把这些图片以照片墙的方式组合在一起。
顺带可以了解一下hexo的渲染管道和javascript。
How
Hexo 渲染顺序
初始化阶段:
- Hexo 读取配置文件和初始化插件。
- 加载主题和其配置文件。
内容处理阶段:
- before_generate:生成前触发,可用于在生成前进行一些准备工作。
- before_post_render:在文章渲染之前触发,可用于在文章内容渲染之前对其进行修改。
- after_post_render:在文章渲染之后触发,可用于在文章内容渲染之后对其进行修改。
- before_exit:Hexo 退出前触发,可用于在退出前进行一些清理工作。
生成阶段:
- 生成静态文件,包括 HTML、CSS、JavaScript 等。
- 将内容写入 public 目录。
部署阶段:
- 部署生成的静态文件到目标服务器或平台
我们需要做的就是在内容处理阶段,重新生成图片墙部分的html代码。
Hexo Filter
过滤器的工作原理
过滤器是通过 hexo.extend.filter.register() 方法来注册的。每个过滤器都绑定在特定的生命周期事件上,当这些事件触发时,Hexo 会依次执行所有注册在该事件上的过滤器。
- before_generate:生成站点之前触发。
- before_post_render:在文章内容渲染之前触发。
- after_post_render:在文章内容渲染之后触发。
- before_exit:Hexo 进程退出之前触发。
- after_render:HTML 内容渲染之后触发。
- after_render:CSS 内容渲染之后触发。
- after_render:JavaScript 内容渲染之后触发。
1
2
3
4
5hexo.extend.filter.register('after_post_render', function(data) {
// 查找所有 img 标签并将 src 属性替换为 HTTPS 协议
data.content = data.content.replace(/<img src="http:\/\/(.*?)"/g, '<img src="https://$1"');
return data;
});
过滤器的返回值
- 对于大多数过滤器函数,需要返回处理后的数据。例如,
after_post_render过滤器需要返回修改后的文章内容。 - 某些过滤器(如
before_exit)不需要返回值。
实现
首先创建一个存放插件的文件夹,我放在hexo_root/plugins/hexo-photo-wall
文件夹中创建一个js入口文件index.js
文件中注册filter并且实现替换功能
1 | hexo.extend.filter.register('before_generate', () => { |




