git地址:開發一個psotcss插件javascript
postcss會將咱們的css生成ast,而後會去遍歷它,在遍歷的過程當中會傳給咱們一些不一樣類型的節點對象,咱們主要須要瞭解的幾個類型:css
css ast主要有3種父類型html
還有幾個個比較重要的子類型:java
這是test的地方的,不熟悉ast的能夠先了解一下:css ast結構node
postCss爲咱們提供了一些方便的操做方法
遍歷git
walkRules:遍歷全部的css代碼塊github
root.walkDecls(decl => { decl.prop = decl.prop.split('').reverse().join(''); });
postcss在遍歷的過程當中,會將當前遍歷的對象的cell傳給回調函數,該參數是對應的rule,decl或者comment等Constructor等構造函數的實例,根據遍歷的節點不一樣,該實例可能會有以下屬性:api
nodes: css規則的節點信息集合babel
decl: 每條css規則的節點信息函數
一樣還有繼承的一些方法,給我操做css的, 好比操做每條具體css屬性的declaration:
after before cleanRaws clone cloneAfter cloneBefore error next prev raw remove replaceWith root toString warn
postcss插件如同babel插件同樣,有固定的格式
export default postcss.plugin('postcss-plugin-name', function (opts) { opts = opts || {}; return function (root, result) { // 處理邏輯 }; });
註冊個插件名,並獲取插件配置參數opts
返回值是個函數,這個函數主體是你的處理邏輯,有2個參數,一個是root,css ast的根節點。另外一個是result,返回結果對象,譬如result.css,得到處理結果的css字符串,result.message包含組件裏建立的warnings和自定義信息,result.warn()創造一個warning實例並將其加入到result.message中,result.warnings()得到全部建立過的warning。
注意組件的異常信息處理,不要直接console,由於一些 postcss 處理器會過濾掉console的輸出致使異常信息丟失,用node.warn或者node.error創造CssSyntaxError 實例,會自動帶上源碼中的位置信息幫助debug,加到異常信息隊列裏。
能夠用postcss.parse來處理一段css文本,拿到css ast,而後進行處理,再經過調用toResult().css拿處處理後的css輸出,在一些簡單的處理中能夠用這種方法。
寫在最後:
參考: