git地址:开发psotcss插件节点类型postcss会把我们的css生成ast,然后遍历。在遍历过程中,它会传递给我们一些不同类型的节点对象。我们主要需要几个类型的理解:cssast主要有3个父类型atRule:@xxx类型,比如@screenComment:commentRule:普通的css规则和几个比较重要的子类型:decl:指的是每个具体的css规则rule:集合作用于选择器的css规则这是测试的地方。不熟悉AST的可以先了解一下:cssast结构postCss操作方法postCss为我们提供了一些方便的操作方法遍历walk:遍历所有节点信息,无论是atRule、rule、comment的父类型,或者rule的子类型,declwalkAtRules:遍历所有atRulewalkComments:遍历所有注释节点walkDecls:遍历所有属性walkRules:遍历所有css代码块root.walkDecls(decl=>{decl.prop=decl.prop.split('').reverse().join('');});postcss会将遍历当前遍历对象的cell传递给回调函数。参数是相应构造函数的实例,例如规则、声明或注释。根据遍历的节点不同,实例可能有如下属性:nodes:css规则的节点信息集合decl:每条css规则的节点信息prop:样式名,如widthvalue:样式值,如10pxtype:typesource:includingstart和end的位置信息,start和end中有line和*column表示行列选择器:type是Selectornameforrule:当type为atRule时,@后跟规则名,例如importparamsin@import'xxx.css':当type为atRule时,@是紧跟在规则名称后面的值,例如@import'xxx.css'xxx.csstext中:当type为comment时,注释的内容还有一些继承的方法供我操作css,比如对每个具体的css属性进行de操作澄清:afterbeforecleanRawsclonecloneAftercloneBeforeerornextprevrawremovereplaceWithroottoStringwarnpostcss插件postcss插件与babel插件一样具有固定格式。exportdefaultpostcss.plugin('postcss-plugin-name',function(opts){opts=opts||{};return,function(/processinglogic};});注册一个插件名,获取插件在配置参数opts中,返回值是一个函数,这个函数的主体就是你的处理逻辑result,返回结果对象,比如result.css,获取处理结果的css字符串,result.message包含warnings和组件中创建的自定义信息,result.warn()创建一个warning实例并添加到result.message中,result.warnings()获取所有创建的warnings。注意组件的异常信息处理,不要直接console,因为有些postcss处理器会过滤掉console的输出,导致异常信息丢失,用node.warn或者node.error创建一个CssSyntaxError实例,会自动带上源码中的位置信息,帮助调试,补充异常信息在队列中。直接调用postcss下的方法可以使用postcss.parse处理一段css文本,得到cssast,然后进行处理,然后调用toResult().css得到处理后的css输出,可以用在一些简单的处理这个方法。写在最后:如果你想写点什么,可以按照这里的指南,很详细https://github.com/postcss/postcss-plugin-boilerplate这是一个vw-by-px的插件我写信将px转换为vw参考:http://api.postcss.orgpostcss-pixel-to-viewport
