2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

花5分钟手写一个简单的HashMap,搞定挑剔面试官

北游学Java

Java 面试 hashmap

教你一招:让集群慢节点无处可藏

华为云开发者联盟

节点 GaussDB 集群 慢节点 慢实例

一篇文章弄清磁盘的里里外外及访问特性

SunnyZhang的IT世界

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java架构师迁哥

由云入端:一场云计算巨头的闯关游戏

脑极体

应用架构步入“无服务器”时代,Serverless技术迎来新发展

华为云开发者联盟

Serverless 华为云 无服务器 可信云 FunctionGraph

Mysql InnoDB使用的锁

water

领域驱动设计101 - 值对象

luojiahu

领域驱动设计 DDD

模块 4 作业

鲲哥

Java岗熬了6年,终成P8,只因搞懂了这七件事

Java架构师迁哥

iOS打包签名,你真的懂吗

Geen练

ios 打包 签名 iOS Developer

Github上“Java面试考点大全”被我扒下来了,20+互联网公司,应有尽有

Java架构师迁哥

IDEA中request获取不到getParameter方法

咿呀呀

javaWeb Request getParameter

架构实战营 - 模块 5- 作业

泄矢的呼啦圈

架构实战营

废物,我TMD一个985却斗不过专科生(大厂java开发2年被裁)

Java架构师迁哥

不是我吹!看完阿里高工码出Java150K字面试宝典,进大厂稳了

Java 程序员 架构 面试

金三银四旗开得胜!春招字节正式批4面,顺利拿到offer

Java 程序员 架构 面试

喜讯!腾讯团队Redis技术笔记,下载量已突破30W;附下载方式

Java架构师迁哥

Spring 是什么?如何去了解spring?

???

Java spring 程序员 编程语言 spring M

🔎【Java 源码探索】深入浅出的分析ClassLoader

码界西柚

Java ClassLoader 类加载器 5月日更 双亲委托模型

从外包辞职再到入职字节那天,我落泪了,没人知道我付出了多少

Java架构师迁哥

接招吧!最强“高并发”系统设计 46 连问,分分钟秒杀一众面试者

面试 高并发 Java 25 周年

Hive|如何避免数据倾斜

数据社

hive 5月日更

探索科技手段下的食品安全,区块链冷链追溯平台建设解决方案

源中瑞-龙先生

iOS开发-60分钟入门

iOSer

ios iOS Document 移动开发 ios开发 iOS Developer

架构师实战营-模块4-设计千万级学生管理系统的考试试卷存储方案

吴建中

架构实战营

太顶了!阿里大牛离职带出来的这份“Java架构核心宝典”学习笔记,差距不是一点点

Java 程序员 架构 面试

kube-controller-manager之AD Cotroller源码分析

良凯尔

Kubernetes 源码分析 Ceph CSI

解析如程688免费住民宿的商业模式

石云升

商业模式 5月日更

记录:28天拿到字节offer的全过程(Java岗)

Java架构师迁哥

ubuntu64位搭建OpenVINO系统(上篇)

IT蜗壳-Tango

5月日更

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