前言
Hexo常用过滤器的执行顺序
测试程序
after_init
->post_permalink
->before_post_render
->after_post_render
->before_generate
->after_generate
->before_exit
before_generate
和after_generate
在运行过程中会随着文章内容的改变而反复执行
before_post_render
、after_post_render
、count_post_permalink
会执行不止一次,由文章的数量决定执行的次数
本篇没有介绍到但是官方文档提及的过滤器有(因为我没看懂😂):template_locals
、new_post_path
、after_render
、server_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
| 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; });
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; });
hexo.extend.filter.register('before_exit', function(){ log.e("before_exit"); });
hexo.extend.filter.register('before_generate', function () { log.e("before_generate"); });
hexo.extend.filter.register('after_generate', function () { log.e("after_generate"); });
hexo.extend.filter.register('after_init', function(){ log.e("after_init"); });
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 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 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 2 3 4 5
| INFO Validating config ERROR after_init INFO Deleted database. INFO Deleted public folder. ERROR before_exit
|
完成
参考文献
官方文档