【笔记】Hexo过滤器的执行顺序

前言

Hexo常用过滤器的执行顺序

测试程序

  • after_init->post_permalink->before_post_render->after_post_render->before_generate->after_generate->before_exit

before_generateafter_generate在运行过程中会随着文章内容的改变而反复执行
before_post_renderafter_post_rendercount_post_permalink会执行不止一次,由文章的数量决定执行的次数
本篇没有介绍到但是官方文档提及的过滤器有(因为我没看懂😂):template_localsnew_post_pathafter_renderserver_middleware

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 3
let count_before_post_render = 0;
hexo.extend.filter.register('before_post_render', function (data) {
if (count_before_post_render < 2) {
count_before_post_render += 1;
} else {
return data;
}
log.e("before_post_render");
return data;
});

// 4
let count_after_post_render = 0;
hexo.extend.filter.register('after_post_render', function (data) {
if (count_after_post_render < 2) {
count_after_post_render += 1;
} else {
return data;
}
log.e("after_post_render");
return data;
});

// 7
hexo.extend.filter.register('before_exit', function(){
log.e("before_exit");
});

// 5
hexo.extend.filter.register('before_generate', function () {
log.e("before_generate");
});

// 6
hexo.extend.filter.register('after_generate', function () {
log.e("after_generate");
});

// 1
hexo.extend.filter.register('after_init', function(){
log.e("after_init");
});

// 2
let count_post_permalink = 0;
hexo.extend.filter.register('post_permalink', function(data){
if (count_post_permalink < 2) {
count_post_permalink += 1;
} else {
return data;
}
log.e("post_permalink");
});

启动服务

1
hexo s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
INFO  Validating config
ERROR after_init
INFO ==================================
███╗ ██╗███████╗██╗ ██╗████████╗
████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝
██╔██╗ ██║█████╗ ╚███╔╝ ██║
██║╚██╗██║██╔══╝ ██╔██╗ ██║
██║ ╚████║███████╗██╔╝ ██╗ ██║
╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝
========================================
NexT version 8.13.2
Documentation: https://theme-next.js.org
========================================
INFO Start processing
# 开始渲染
ERROR before_generate
ERROR post_permalink
ERROR post_permalink
ERROR after_generate
# 监听端口,此时可以访问
INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
ERROR before_exit
# 开始渲染文章
ERROR before_post_render
ERROR before_post_render
ERROR after_post_render
ERROR after_post_render
ERROR before_generate
ERROR after_generate
# 当文章内容发生变动后立即对文章重新渲染
ERROR before_generate
ERROR after_generate
# 当终止程序时立即执行清理
^C
INFO See you again
ERROR before_exit

编译生成

1
hexo g
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
INFO  Validating config
ERROR after_init
INFO ==================================
███╗ ██╗███████╗██╗ ██╗████████╗
████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝
██╔██╗ ██║█████╗ ╚███╔╝ ██║
██║╚██╗██║██╔══╝ ██╔██╗ ██║
██║ ╚████║███████╗██╔╝ ██╗ ██║
╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝
========================================
NexT version 8.18.0
Documentation: https://theme-next.js.org
========================================
INFO Start processing
# 开始渲染
ERROR before_post_render
ERROR post_permalink
ERROR post_permalink
ERROR after_post_render
ERROR before_generate
ERROR after_generate
INFO Files loaded in 0 s
# 开始渲染文章
INFO Generated: search.xml
INFO 1 files generated in 0 s
# 当终止程序时立即执行清理
ERROR before_exit

清理

1
hexo cl
1
2
3
4
5
INFO  Validating config
ERROR after_init
INFO Deleted database.
INFO Deleted public folder.
ERROR before_exit

完成

参考文献

官方文档