Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[部落格改版學DevOps][03]Wyam的運作模式

2018-05-02 Wednesday
[部落格改版學DevOps][03]Wyam的運作模式.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

在上一篇([部落格改版學DevOps][02]Wyam是什麽?)介紹了Wyam的安裝及如何用它來建立一個部落格網站之後,如果想要調整產生的内容就會需要瞭解Wyam的運作模式。

在這一篇將會對Wyam的幾個概念及如何做微調做介紹。

Waym的檔案結構

Wyam有兩個重要的檔案/資料夾:

  1. config.wyam
  2. input資料夾

config.wyam

config.wyam是設定Wyam在編譯的時候執行什麽(方式)的一個設定檔案。因此要對整個編譯過程做調整,或者設定一些參數,都是在這個檔案裏面做設定。

這個檔案本質上是一個C# base的DSL語言,因此在撰寫上面把他當成C#的source code再寫就可以了。因此要特別注意像是結束要加上分號等這種事情。

更多資訊可以參考官網的文件:

input 資料夾

這個資料夾裏面有:

  1. posts - 這個資料夾
  2. about.md - 這個檔案

input 資料夾放的東西是要被執行(編譯)的原始碼。這裏面包含了範本(Template)文章以及其他用到的asset(圖片,css等)

如果對應到畫面,可以看到about.md對應到最後產生在menu 上面的about而,posts/first-post.md則對應到第一篇的文章。

explorer_2018-05-01_18-03-07.png
原始和最後產生出來的對應
如果注意看,會發現在產生出來的還有ArchiveTags這兩個,這兩個是blog recipe額外產生出來。稍後還會在介紹。

一篇文章的組成結構

上面瞭解了幾個重要的檔案之後,接下來看看一篇文章是怎麽組成。

在所有的Static Site Generator對於文章都會分兩個部分:

  1. 文章的meta - 關於這篇文章的一些meta資訊,例如【標題】、【發佈時間】、【Tag】等
  2. 文章的内容 - 這篇要呈現的内容


官方介紹結構

這個在一篇文章的體現方式是透過---(3個減號)來區分,上半段是Front Matter(設定Metadata),下半段是内文


範例第一篇的内容

meta的部分

meta是關於這篇文章的metadata資訊,設定之後,在模板的地方就可以用 Model.Get<T>()的方式取到值,用於套版。

在Wyam meta可以用兩種格式來寫:

  1. YAML
  2. JSON

預設使用的是YAML,因此如果想使用JSON除了設定上面使用JSON的格式,也會需要去config.wyam裏面做調整。

在Blog recipe裏面有幾個預設的meta值可以設定,相關可以參考:官網Blog Document Metadata

需要注意,在文件提到的BlogKeys.Tags,在設定上面不需要BlogKeys的部分,只需要Tags即可。

如果是在模板的地方要取得這個Tags的值,才會使用BlogKeys.Tags這個constant參數(而這個constant 參數的值就是Tags)。

其他參數是一樣的概念。

内容的部分

這個就是文章的核心内容。

Wyam預設支援兩種格式:

  1. markdown
  2. razor

如果要用Razor做撰寫,會需要做一些設定,後面在提。
如果上面兩種格式都不喜歡,只要.Net有對應的library,那麽其實只需要寫一些C#就能夠使用。

瞭解Wyam執行模式

上面瞭解了文章格式之後,接下來瞭解一下整個是怎麽串起來,Wyam的執行架構。

Wyam裏面有兩個概念:

  1. Module - 一個動作的最小單位
  2. Pipeline - 好幾個module組合在一起

Wyam就是透過定義每一個pipeline有什麽module會執行,然後定義pipeline的執行順序。

recipe其實就是一個已經定義好的pipeline組合而已。

powershell_2018-05-01_18-41-38.png
可以看到,blog recipe執行的時候總共有14個pipeline被執行,而每一個pipeline則有不同的module

module

Module定義的是做一件事情的最小單位。

舉例來説,剛剛介紹内容的時候有提到Front Matter裏面的metadata可以是JSON或者是YAML的格式。Wyam是怎麽支援這兩種格式呢?其實就是因爲有兩個module:

  1. YAML
  2. JSON

因此,預設使用YAML做parsing,如果要調整,只需要把pipeline裏面的module改成使用JSON Module即可。

module可以做很多種事情,完全取決於你的想象力。例如有些是從内文裏面截取出 介紹説明,并且把這個值放到metadata裏面讓套版可以使用。

詳細module作用可以參考:

如果内建的不夠自己用,要自己寫module其實很容易。如果不想包成能夠重複使用,那麽只需要寫在config.wyam即可。後面在微調的時候會在介紹。

pipeline

如果說module是最小單位的動作,pipeline就是把這些最小單位組合起來,然後達到某個目的的module組合。

pipeline概念介紹可以參考官網的pipeline模式

要調整現有的pipeline可以參考官網的調整pipeline裏面的module

瞭解了module及pipeline之後,有一個概念就很好理解了,那就是recipe

recipe就是已經事先定義好的pipeline集合。因此如果要微調recipe,只需要調整pipeline裏面的module即可。

結語

透過這一篇,相信對於整個Wyam的運作有了一些基本的概念。對於Wyam裏面如何使用recipe來組合pipeline,然後用pipeline組合module的流程清楚了。

也介紹了一篇内容的組成和重要的config.wyam檔案可以用來做一些調整。

在下一篇將會對於如何微調做一些介紹,和一般blog會設定的值做介紹。

2018-05-02 Wednesday
comments powered by Disqus