开发一个PostCSS插件

更新日期: 2019-03-18阅读: 1.7k标签: PostCSS

节点类型

postcss会将我们的css生成ast,然后会去遍历它,在遍历的过程中会传给我们一些不同类型的节点对象,我们主要需要了解的几个类型:

  • css ast主要有3种父类型

    • AtRule: @xxx的这种类型,如@screen
    • Comment: 注释
    • Rule: 普通的css规则
  • 还有几个个比较重要的子类型:

    • decl: 指的是每条具体的css规则
    • rule:作用于某个选择器上的css规则集合

这是test的地方的,不熟悉ast的可以先了解一下:css ast结构


postCss操作方法

postCss为我们提供了一些方便的操作方法
遍历

  • walk: 遍历所有节点信息,无论是atRule、rule、comment的父类型,还是rule、 decl的子类型
  • walkAtRules:遍历所有的atRule
  • walkComments:遍历所有的注释节点
  • walkDecls:遍历所以的属性
  • walkRules:遍历所有的css代码

    root.walkDecls(decl => {
        decl.prop = decl.prop.split('').reverse().join('');
    });

postcss在遍历的过程中,会将当前遍历的对象的cell传给回调函数,该参数是对应的rule,decl或者comment等Constructor等构造函数的实例,根据遍历的节点不同,该实例可能会有如下属性:

  • nodes: css规则的节点信息集合

    • decl: 每条css规则的节点信息

      • prop: 样式名,如width
      • value: 样式值, 如10px
  • type: 类型
  • source: 包括start和end的位置信息,start和end里都有line和* column表示行和列
  • selector: type为rule时的选择器
  • name: type为atRule时@紧接rule名,譬如@import 'xxx.css'中的import
  • params: type为atRule时@紧接rule名后的值,譬如@import 'xxx.css'中的xxx.css
  • text: type为comment时的注释内容

同样还有继承的一些方法,给我操作css的, 比如操作每条具体css属性的declaration

after
before
cleanRaws
clone
cloneAfter
cloneBefore
error
next
prev
raw
remove
replaceWith
root
toString
warn


postcss plugin

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下的方法

可以用postcss.parse来处理一段css文本,拿到css ast,然后进行处理,再通过调用toResult().css拿到处理后的css输出,在一些简单的处理中可以用这种方法。

写在最后:

参考:

git地址:开发一个psotcss插件


链接: https://www.fly63.com/article/detial/2419

使用 PostCSS 进行 CSS 处理

PostCSS 本身是一个功能比较单一的工具。它提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理。

PostCSS_自动处理css3属性前缀

为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀。目的就是让我们写的页面在每个浏览器中都可以顺利运行。PostCSS 的主要功能只有两个:第一个就是前面提到的把CSS解析成 JavaScript可以操作的 抽象语法树结构,第二个就是调用插件来处理 AST并得到结果。

postcss-loader有什么用?如何配置webpack让浏览器自动补全前缀

PostCSS 本身是一个功能比较单一的工具。它提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理

前端Vue框架在PostCSS怎样使用sass

众所周知转换 px 单位的插件有很多,知名的有 postcss-px-to-viewport 和 postcss-pxtorem,前者是将 px 转成 vw,后者是将 px 转成 rem,精简了不常用的配置。将成为vw优先单位使用,以rem作为回退模式。考虑到vw在移动设备的支持度不如rem

零基础理解 PostCSS 的主流程

官网说:“PostCSS,一个使用 JavaScript 来处理CSS的框架”。这句话高度概括了 PostCSS 的作用,但是太抽象了。按我理解,PostCSS 主要做了三件事:

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!