postcss 开发实战

栏目: CSS · 发布时间: 5年前

内容简介:来呀!来呀!关注我吧!!

postcss 开发实战

来呀!来呀!关注我吧!!

postcss 开发实战

邵裕东,2018年3月入职Qunar,现任平台事业部大前端技术中心前端开发工程师,负责公司移动端框架hy、qrn的开发维护,nanachi小程序多端转译框架开发。追求前端工程化,喜欢做一切有意义的事。

初识 postcss

css 是 web 开发中重要的一部分,然而 css 规范仍存在一些浏览器兼容性问题,由此出现了 sass、less、stylus 等 css 预处理器,提高了开发人员的效率。 postcss 的官方定义: A tool for transforming CSS with JavaScript. 一个用 javascript 来处理 css 语法的工具。postcss 本身不会对 css 文件进行修改,它只将 css 文件转化为抽象语法树(abstract syntax tree,后简称 ast),然后插件对语法树进行处理,最后由 postcss 将 ast 还原为普通 css,所以 postcss 对 css 文件的修改都是基于插件来实现的。

postcss 可以做什么

截止到目前,postcss 已有200多个插件,列举一些比较出名的插件: 1、autoprefixer 它从 caniuse 网站上的数据,自动添加浏览器前缀到 css 中,帮助开发人员解决浏览器兼容问题。 2、postcss-preset-env 支持 css 的最新特性,并兼容大多数浏览器。 3、postcss-modules 模块化 css 代码,为选择器提供命名空间后缀。 4、precss 解析一些类 sass 语法,包括:变量、嵌套、mixins等。 5、stylelint css 语法检查器,可以帮助开发者检查 css 文件中的语法错误。 更多插件地址:https://github.com/postcss/postcss/blob/master/docs/plugins.md

postcss 用法

postcss 可以与各种前端打包 工具 相结合使用,例如 webpack、gulp、grunt、rollup...

webpack

也可以直接使用 postcss 提供的 js api 直接处理 css。

JS API

从零开始开发一个 postcss 插件

抽象语法树

开发 postcss 插件前,首先要理解的一个概念就是文章开头提到的抽象语法树,postcss 将 css 文本转化为 ast,javascript 可以通过一系列 api 来操作、改变 ast,再由解析器将 ast 解析成普通目标 css 文本。 css 文件:

转化为 ast,对应的 json:

其中,ast 的第一级是一个 root 类型的节点,type 除 root 外还包括 rule、decl、atrule、comment,nodes 属性表示节点下的子节点。 postcss 为我们提供了一些基本的 ast 操作方法: -walk:遍历所有节点信息 -walkAtRules:遍历所有 atrule 类型节点 -walkRules:遍历所有 rule 类型节点 -walkComments:遍历所有 comment 类型节点 更多节点信息参照 postcss api 文档:https://api.postcss.org/。

插件开发

我们开发一个将像素值乘以2的插件。

我们调用 walkDecls 函数,从 root 节点开始遍历所有的 decl 类型节点,取出 decl.value 中的像素值,乘以2后替换掉原有 decl.value,这样就实现了一个简单的 postcss 插件。

实际问题:postcss 转义 less 语法

less 是一种 css 预处理器,为 css 扩展了更多的功能,如变量、继承、mixins、函数等。如果我们想基于 less 的语法使用 postcss 的插件,一种方案是使用 less 将 less 语法转义成css 语法后,再用 postcss 处理转义后的 css 文件,但这种方案由于要经历两次语法树的生成过程,比较耗时。与 sass 不同,less 本身就是 js 编写的,因此我们可以基于 less 自带的语法树解析器,将 less 语法树直接转化为 postcss 语法树,就可以无缝衔接使用其他 postcss 插件。 这个轮子已经有大神帮我们造好,叫做 postcss-less-engine,只是项目已有一年多未更新,less 还是基于2.7.1版本,更新到3.0.0以上会报错。查阅了 less 的 changelog,发现原因是3.0.0以后,less 解析器中的 Directive 类重命名为 AtRule,Rule 重命名为 Declaration。bug 修复好已提 pr 等待作者更新,大家如有需要支持最新 less 可以暂时使用 postcss-less-engine-latest,git 地址:https://github.com/Crunch/postcss-less。 插件用法:

如果只想支持 less 的部分特性,完全可以自己编写 postcss 插件来支持,postcss-less 插件可以用来识别 less 语法,为 postcss 抽象语法树添加 less 标识,但是不会转换原有代码,转换工作交给其他 postcss 插件来完成,大家有兴趣可以开发适合自己需求的插件。

postcss 开发实战

postcss 开发实战


以上所述就是小编给大家介绍的《postcss 开发实战》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

六度分隔

六度分隔

邓肯·J·瓦茨 / 陈禹 / 中国人民大学出版社 / 2011-3 / 46.00元

正如副标题所表明的,《六度分隔:一个相互连接的时代的科学》的基本内容是介绍一门正在形成中的新科学——关于网络的一般规律的科学。有这样一门科学吗?它的内容和方法是什么?近年来,这门学科有什么实质性的进展吗?在《六度分隔:一个相互连接的时代的科学》中,作者根据自己的亲身经历娓娓道来,用讲故事的方式,对于这些问题给出了令人信服的回答 除了简要的背景和总结以外,《六度分隔:一个相互连接的时代的科学》......一起来看看 《六度分隔》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具