以下針對 hexo 的 filter 中,以下幾個 filter 的執行順序作探討:
after_initbefore_exitbefore_post_renderafter_post_renderbefore_generateafter_generatetemplate_localsafter_renderpost_permalinknew_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 中有
postspagescategoriestagsdata
其中 posts 在 before_post_render 前的 post_permalink 會被改值,其他屬性會在 template_locals 前的 post_permalink 被修改。