以下針對 hexo 的 filter 中,以下幾個 filter 的執行順序作探討:
after_init
before_exit
before_post_render
after_post_render
before_generate
after_generate
template_locals
after_render
post_permalink
new_post_path
過濾器
初始化後 After Init
不管是 hexo clean
或是 hexo generate
都會觸發 after_init
filter,參數是 null
。
文章連結 Post Permalink
post_permalink
filter,參數是文章連結,會在 before_post_render
、 after_post_render
、 before_generate
、 template_locals
前觸發。
文章渲染 Post Render
先對每篇文章做 post render,因此會觸發 before_post_render
,參數是 Document
物件,文章渲染後會改變 Document.content
值,接著觸發 after_post_render
。
產生路由 Generate
接著會觸發 before_generate
的過濾器,參數是一條陣列,陣列第一個元素是所有 Document
物件,第二個不清楚。在 hexo 官網上並沒有清楚解釋 before_generate
的參數。
修改參數 Template Locals
產生路由後 (通常是 category 和 tag 的靜態網頁),會對每個路由後的結果給一個調整變數的機會,即觸發 template_locals
,參數是 Locals
物件,主要的設定都是集中在 Locals.page
內。
最後會觸發 after_generate
,參數是 null
。
離開前 Before Exit
不管是 hexo clean
或是 hexo generate
都會觸發 before_exit
filter,參數是 null
。
其他
after_render
和 new_post_path
沒有被觸發,不知用途。
關於 Hexo.locals
物件 Hexo
在 filter 中通常可由 this
存取,其中 Hexo.locals
是一個 Locals
物件,內部有 cache
屬性,還看不出用途。
cache
中有
posts
pages
categories
tags
data
其中 posts
在 before_post_render
前的 post_permalink
會被改值,其他屬性會在 template_locals
前的 post_permalink
被修改。