【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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:002119
用户头像

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

关注

评论

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

设计模式之美--接口和抽象类区别

GalaxyCreater

设计模式

Web中间件常见漏洞总结

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

用户画像分析的应用及搭建

穿过生命散发芬芳

11月月更 用户画像分析

2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,

福大大架构师每日一题

算法 rust 福大大

安全规范建设指北

I

安全架构 策略 安全规范

架构实战训练营模块 5 作业

Geek_b35d92

微博评论 微博

移动应用的手动测试策略

FunTester

算法题学习---链表相加(二)

桑榆

算法题 11月月更

什么是无线通信协议?无线通信协议有哪些典型的协议?

wljslmz

wifi 无线通信 蓝牙 11月月更

MUI实战之页面初始化与创建子页面对于新页面的实战心得

恒山其若陋兮

前端 mui 11月月更

微博系统中”微博评论“的高性能高可用计算架构

小虎

架构训练营

【愚公系列】2022年11月 微信小程序-app.json配置属性之plugins

愚公搬代码

11月月更

安全左移移了么

I

安全架构 安全左移

跟着卷卷龙一起学Camera--噪声与去噪04

卷卷龙

ISP camera 11月月更

云原生网络趋势 | K8s托管整个基础设施

叶秋学长

云原生 11月月更 网络趋势 云原生系列

图解KafkaConsumer SyncGroupRequest请求流程

石臻臻的杂货铺

kafka Kafka实战 11月月更

安装 Docker Compose

蜗牛也是牛

现代化安全产品

I

安全产品设计 安全架构

“好评返现” 被定为违法行为,互联网数据打假时代何时到来

石头IT视角

dubbo + zookeeper + spring 分布式系统

石臻臻的杂货铺

spring dubbo 11月月更

架构训练营作业5-微博评论的高性能高可用计算架构

许四多

图解Kafka的RecordBatch结构

石臻臻的杂货铺

kafka Kafka实战 11月月更

复杂组合逻辑电路

二哈侠

Verilog 11月月更 74LS138 译码器

跟着卷卷龙一起学Camera--噪声与去噪02

卷卷龙

ISP camera 11月月更

API工具常见分类

阿泽🧸

11月月更 API工具

极速下载 docker镜像

蜗牛也是牛

跟着卷卷龙一起学Camera--噪声与去噪03

卷卷龙

ISP camera 11月月更

微博评论高性能高可用计算架构

π

MUI对于原生导航栏的新页面与关闭页面的预加载的底层代码深入运用【MUI】

恒山其若陋兮

mui 11月月更

在MUI框架中对于事件绑定与取消和监听的触发自定义的深入运用与实战

恒山其若陋兮

mui 11月月更

架构实战营模块5作业

冷夫冲

架构训练营 架构实战

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