写点什么

Facebook 使用 Stylelint 以期保证 CSS 代码质量

  • 2016-06-22
  • 本文字数:1013 字

    阅读完需:约 3 分钟

近日,来自 Facebook 的开发者 Juriy Zaytsev 发布文章称,他们更换了CSS Linter 工具,采用了基于 PostCSS Stylelint 作为新的 Linter 工具,以期保证 CSS 代码质量。

上千名工程师,多条不同产品线,庞大代码库,日渐增加的新特性……种种特点加在一起,给 Facebook 的代码质量管理带来了独特的挑战。而如何保证上千份不停变换的 CSS 文件质量,对于 Facebook 来说,也是非常头疼的问题。Facebook 为了解决这个问题,采用了 Code Review、代码样式规范、重构以及自建的 CSS Linter 等手段。

然而,Facebook 对之前自建的 CSS Linter 并不满意。该 Linter 是基于正则表达式来对 CSS 进行约束的,因此,所设定的每一个检测规则都需再去设定相应的匹配规则,并且要去遍历整个文件进行检测,这不仅难以维护,而且性能很差。

CSS 本身是一门语言,把它当做纯文本文件,采用正则表达式来处理并不是一个好选择。而换种思路,采用抽象语法树的方式来构建一个解析器,则会在性能上有比较不错的提升。

此时,基于 PostCSS 的 Stylelint 走进了 Facebook 的视野。Stylelint 提供了完整的抽象语法树的访问方式,因此,使用者可以快速访问具体的代码节点、传入一些基本函数。这可以大大增强检测规则可读性和可维护性,正是 Facebook 所想要的。

Facebook 理所当然地选择了 Stylelint,并在具体的使用过程中对 Stylelint 进行了完善,针对旧 Linter 的痛点添加了功能。

Facebook 所采用的 Stylelint 内置规则包括: declaration-no-important selector-no-universal , 以及 selector-class-pattern 。Stylelint 还可以添加自定义规则,具体的添加方法可以参考 built-in plugin mechanism 。同时,Facebook 也为 Stylelint 贡献了一些规则插件

Stylelint 尚有不完善的地方,例如没有提供自动格式化与修正功能,而人工修正会浪费开发者大量的时间。因此,Facebook 正着手为其添加自动格式化与修正功能,这将为 Stylelint 用户带来极大的便利。

同时,Facebook 选择了 Jest 框架进行单元测试,来检测当前所处的环境是否是 CSS 文件。

Juriy Zaytsev 提到,换一个靠谱的 CSS Linter 工具只是保证高质量的 CSS 的代码的第一步,Facebook 还打算添加更多的自定义的规则,设法达到使用规则的最佳实践以及制定统一的代码规范。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-22 19:002652
用户头像

发布了 28 篇内容, 共 19.0 次阅读, 收获喜欢 29 次。

关注

评论

发布
暂无评论
发现更多内容

鉴释×中科院计算所丨OS2ATC 2020精彩回顾

鉴释

开源 操作系统

51CTO专访|鉴释首席架构师刘新铭:让软件开发更安全、更高效

鉴释

编译器

我们三岁啦!

鉴释

直播回顾丨鉴释首席架构师刘新铭为您解读“第一性原则”

鉴释

软件开发 代码质量 软件质量与安全

BoCloud博云:ESB老旧力不能支,微服务独立自治强势替代

BoCloud博云

微服务

鉴释×RT-Thread丨2020 RT-Thread开发者大会精彩回顾

鉴释

操作系统 物联网

我们该如何应对日益增长的安全债务风险?

鉴释

应用安全 代码安全

揭秘百度微服务监控:百度游戏服务监控的演进

百度开发者中心

云计算 微服务 最佳实践 方法论 云原生

如何使用 Kind 快速创建 K8s 集群?

尔达Erda

开源 云原生 k8s PaaS kind

成为Linux大佬的学习之路-规划

学神来啦

Linux 运维 linux运维 linux学习

性能测试误差对比研究(二)

FunTester

性能测试 压测 接口测试 测试框架 误差分析

RTC月度小报5月丨教育aPaaS灵动课堂升级、抢先体验VUE版 Agora Web SDK、声网Agora与HTC达成合作

声网

月度小报 行业深度

百度前端三面面试题全部公开,三面的最后一个问题令我窒息

前端依依

百度 面试 大前端 经验总结

认识容器,我们从它的历史开始聊起

华为云开发者联盟

Docker Kubernetes 容器 进程

第八周作业——知识星球内容管理功能

小夏

产品经理训练营 邱岳

鉴释课堂丨编译器技术入门知识一网打尽

鉴释

编译器 编译器原理

性能测试误差对比研究(一)

FunTester

性能测试 接口测试 测试框架 误差分析

fil价格今日行情?2021年fil币预估价格多少钱一枚?

区块链 分布式存储 IPFS fil价格 fil预测

鉴释人物 | 专访产品开发总监吴翔:DevSecOps的竞技之道

鉴释

敏捷开发 应用安全 软件安全 软件质量与安全

CloudQuery 如何实现云上数据导入导出

BinTools图尔兹

数据库 dba 国产数据库 运维开发

工程师文化落地的几点思考

baiyutang

敏捷 敏捷开发 精益开发 精益思想 敏捷管理

图灵奖得主Judea Pearl谈机器学习:不能只靠数据

百度开发者中心

机器学习 最佳实践 方法论 文化 & 方法 其他

架构实战训练营模块三课后作业

Clarke

2021全国人工智能师资培训走进北理工,百度飞桨助力高校教师提升AI能力

百度大脑

人工智能 高校

创业邦专访丨兼容国内外市场的代码分析软件,鉴释科技帮助企业减少bug发生率

鉴释

创业公司

六种主要服务器管理协议简单概述-行云管家

行云管家

行云管家 服务器协议 服务器管理

围观|解读新一代企业数字化架构的“三驾马车”

尔达Erda

开源 DevOps 云原生 数字化转型 数字化

【报名】百度EasyDL研讨会:揭秘智能化硬件AI应用的技术难点与行业落地

百度大脑

人工智能 智能化

鉴释人物丨专访首席技术官陈新中:三十年磨一“鉴”, 打造静态代码分析行业标杆

鉴释

编译器 静态代码分析

鉴释人物丨专访首席科学家李隆: 重一步业务逻辑验证,省百步漏洞补缺

鉴释

业务逻辑 漏洞修复

论工作几年深陷业务代码的程序员如何实现自我提升

北游学Java

Java 程序人生

Facebook使用Stylelint以期保证CSS代码质量_Meta_韩婷_InfoQ精选文章