[hexo 3.2.0] filter 觀察

以下針對 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_renderafter_post_renderbefore_generatetemplate_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_rendernew_post_path 沒有被觸發,不知用途。

關於 Hexo.locals

物件 Hexo 在 filter 中通常可由 this 存取,其中 Hexo.locals 是一個 Locals 物件,內部有 cache 屬性,還看不出用途。

cache 中有

  • posts
  • pages
  • categories
  • tags
  • data

其中 postsbefore_post_render 前的 post_permalink 會被改值,其他屬性會在 template_locals 前的 post_permalink 被修改。

,