// 1. 能夠添加屬性前綴,適應全部的瀏覽器 const autoprefixer = require('autoprefixer'); // 2. 將全部的import 導入進來的模塊所有合併爲一個文件 const atImport = require('postcss-import'); // 3. 實現代碼的壓縮優化 const cssnano = require('postcss-cssnano'); // 4. cssnext提早使用CSS的高級語法 const cssnext = require('postcss-cssnext'); // 5. precss 相似於sass的語法處理 const precss = require('precss')
3.import實現模塊的合併(模塊分開,提早合併)
4.CSS語法檢查,兼容性檢查
5.壓縮文件css
[!NOTE]
PostCSS是一個經過JS插件轉換樣式表的工具,它自己並非一門新的CSS語言,而是一個平臺或者是生態心態,提供插件擴展服務即JS API,開發者能夠根據這些接口,定製開發插件,
目前比較流行的插件工具如:Autoprefixer 、Stylelint 、CSSnano。html
Source string → Tokenizer → Parser → AST → Processor → Stringifier前端
[!NOTE]
將源css字符串進行分詞node
舉個例子:
.className { color: #FFF; }
經過Tokenizer後結果以下:webpack
[ ["word", ".className", 1, 1, 1, 10] ["space", " "] ["{", "{", 1, 12] ["space", " "] ["word", "color", 1, 14, 1, 18] [":", ":", 1, 19] ["space", " "] ["word", "#FFF" , 1, 21, 1, 23] [";", ";", 1, 24] ["space", " "] ["}", "}", 1, 26] ]
以word類型爲例,參數以下:web
const token = [ // token 的類型,如word、space、comment 'word', // 匹配到的詞名稱 '.className', // 表明該詞開始位置的row以及column,但像 type爲`space`的屬性沒有該值 1, 1, // 表明該詞結束位置的row以及column, 1, 10 ]
[!NOTE]
通過Tokenizer以後,須要Parser將結果初始化爲AST前端工程化
this.root = { type: 'root', source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: "<input css 1>"}, start: { line: 1, column: 1 } , end: { line: 1, column: 27 } }, raws:{after: "", semicolon: false} nodes // 子元素 }
通過AST以後,PostCSS提供了大量JS API給插件用瀏覽器
插件處理後,好比加瀏覽器前綴,會被從新Stringifier.stringify爲通常CSS。sass
參考博客:模塊化