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

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

关注

评论

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

700行无用 纯 CSS 祝考生 金榜高粽《1_bit 的无用 CSS 代码 》

1_bit

CSS html 前端

SDN系统方法 | 4. 裸金属交换机

俞凡

架构 网络 sdn SDN系统方法

函数

Jason199

js 函数 6月月更

A Guide to Write Elegant ETL in Easy SQL

Bright

数据开发 ETL 大数据开发 EasySQL

【Spring 学习笔记(四)】Spring Bean 集合注入和自动装配

倔强的牛角

spring Java EE 6月月更

支付系统安全设计思维导图

靠谱的程序员

支付安全

vue指令-1

小恺

6月月更

企业网站建设方法

源字节1号

软件开发

透过华为军团看科技之变(三):数据中心底座

脑极体

区块链mass哈希競猜dapp游戏开发源代码(多游戏)

开发微hkkf5566

学生管理系统架构文档

爱晒太阳的大白

模块3作业(外包学生管理系统架构文档)

Geek_701557

Node详细讲解

恒山其若陋兮

6月月更

VistorPattern-访问者模式

梁歪歪 ♚

设计模式

Jetpack Composes 之TextField详解

坚果

6月月更

Java中的13个原子操作类

急需上岸的小谢

6月月更

读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》

蔡农曰

读书笔记 架构 后端 后端开发 后端开发书籍

等你加入|建木开源社区团队成员招募

Jianmu

开源社区 自动化运维 社区运营 志愿者招募

LabVIEW控制Arduino采集多路模拟量、数字量(进阶篇—1)

不脱发的程序猿

单片机 LabVIEW VISA Arduino Uno 采集多路模拟量、数字量

抖音大举进军电商领域:这步棋应该如何下

石头IT视角

外包学生管理系统

极客土豆

Leecode上的代码到Pycharm运行解决方法

武师叔

Python pycharm Leet Code 6月月更

秒懂网络拓扑中的下一跳地址

wljslmz

网络协议 网络工程师 网络技术 6月月更

后端提升技术资源汇总

卢卡多多

技术栈 资源汇总 6月月更

初识SDN网络

穿过生命散发芬芳

SDN网络 6月月更

MementoPattern-备忘录模式

梁歪歪 ♚

设计模式

StatePattern-状态模式

梁歪歪 ♚

设计模式

【腾讯云代码分析】五月上新+新功能前瞻

腾源会

git 高效操作之 range revert

Nick

git git revert 6月月更 range revert 高效操作

MediatorPattern-中介者模式

梁歪歪 ♚

设计模式

leetcode 79. Word Search 单词搜索

okokabcd

LeetCode 搜索 算法与数据结构

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