内容简介:前端工程化日益成熟今天,我们对于工具越来越深的封装。不管是从
写在前面的话
前端工程化日益成熟今天,我们对于 工具 越来越深的封装。不管是从 vue-cli
的 3.0
版本起,还是 umi
、 bigfish
等前端脚手架,对于 webpack
都封装在内,对于工程化无疑是高效的,但也在一定程度上让新手们者失去了从零配置一个项目的机会,所以很多时候还是希望能透过大神们的框架,研究一下底层结构。
简介
PostCSS 是一个通过JS插件转换样式表的工具,它本身并不是一门新的CSS语言,而是一个平台或者是生态心态,提供插件扩展服务即 JS API ,开发者可以根据这些接口,定制开发插件,目前比较流行的插件工具如: Autoprefixer
、 Stylelint
、 CSSnano
。
工作流
大致步骤:
- 将CSS解析成抽象语法树(AST树)
- 将AST树”传递”给任意数量的插件处理
- 将处理完毕的AST树重新转换成字符串
在PostCSS中有几个关键的处理机制:
Source string → Tokenizer → Parser → AST → Processor → Stringifier
Tokenizer
将源css字符串进行分词
举个例子:
.className { color: #FFF; }
通过Tokenizer后结果如下:
[ ["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
类型为例,参数如下:
const token = [ // token 的类型,如word、space、comment 'word', // 匹配到的词名称 '.className', // 代表该词开始位置的row以及column,但像 type为`space`的属性没有该值 1, 1, // 代表该词结束位置的row以及column, 1, 10 ]
Parser
经过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 // 子元素 }
Processor
经过AST之后,PostCSS提供了大量 JS API 给插件用
Stringifier
插件处理后,比如加浏览器前缀,会被重新 Stringifier.stringify
为一般CSS。
结语
PostCSS更多的是提供平台能力,赋能js的处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning Processing
Daniel Shiffman / Morgan Kaufmann / 2008-08-15 / USD 49.95
Book Description Teaches graphic artists the fundamentals of computer programming within a visual playground! Product Description This book introduces programming concepts in the context of c......一起来看看 《Learning Processing》 这本书的介绍吧!