内容简介:来呀!来呀!关注我吧!!
来呀!来呀!关注我吧!!
邵裕东,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 开发实战》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Flutter 完整开发实战详解(十六、详解自定义布局实战)
- 实战·使用taro+云开发快速开发小程序
- 实战:小程序云开发之云函数开发
- Angular4 实战开发
- Python爬虫开发与项目实战
- Taro + 小程序云开发实战
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mathematica Cookbook
Sal Mangano / O'Reilly Media / 2009 / GBP 51.99
As the leading software application for symbolic mathematics, Mathematica is standard in many environments that rely on math, such as science, engineering, financial analysis, software development, an......一起来看看 《Mathematica Cookbook》 这本书的介绍吧!