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

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

关注

评论

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

计算机网络学习笔记 概述

Regan Yue

计算机网络 9月日更 计网

设定Docker容器日志的大小和轮询规则

耳东@Erdong

Docker log 9月日更

在线JSON转typescript工具

入门小站

工具

面试官让手写队列,差点挂了

bigsai

linux之read命令

入门小站

工具

18.理智分析--人类离威胁还相当遥远

Databri_AI

人工智能

🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(4)总结归纳Jenkins的安装使用和配置流程介绍

码界西柚

maven jenkins git 学习 9月日更

NoSQL-MongoDB

hanaper

人工智能计算中心,助力数字经济发展的算力“虫洞”

脑极体

10行代码集2000张美女图,Python爬虫120例,再上征途

梦想橡皮擦

9月日更

国足历届世界杯对战记录整理

6979阿强

图算法 GraphScope 2022年卡塔尔世界杯 中国国足

如何提高开会效率?

石云升

项目管理 管理 引航计划 内容合集 9月日更

深入了解现代web浏览器(第四部分)

GKNick

Go 编码习惯

baiyutang

Go 语言 9月日更

【LeetCode】从根到叶的二进制数之和Java题解

Albert

算法 LeetCode 9月日更

图数据库在社交方向上的应用

6979阿强

社交网络 GraphScope 图数据 图关系

IP地理定位之数据驱动广告矩阵

郑州埃文科技

数据中台建设的9大误区,你中了几条?

博文视点Broadview

学生管理系统架构设计

一叶知秋

#架构实战营

密码学系列之:bcrypt加密算法详解

程序那些事

算法 加密解密 密码学 程序那些事

GitHub上下载量突破100000+阿里巴巴的这份开源项目如此牛逼

Java 编程 架构 面试 计算机

序列化与反序列化之Protostuff(一)

程序员架构进阶

架构 protobuf 9月日更 序列化与反序列化 protostuff

Java字节码技术学习笔记

风翱

Java 9月日更

架构实战营 外包学生管理系统的架构文档

💤 ZZzz💤

架构实战营

架构训练营模块三作业

TIEDPAG

架构训练营 模块三

【Flutter 专题】45 图解矩阵变换 Transform 类 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

什么是数据驱动

奔向架构师

数据治理 9月日更

谈 C++17 里的 Observer 模式

hedzr

c++ 设计模式 Design Patterns c++17 observer pattern

Vue进阶(幺幺叁):element ui 表单验证 this.$refs[formName].validate()问题解决

No Silver Bullet

Vue 9月日更

固定QPS压测初试

FunTester

性能测试 测试框架 压力测试 QPS FunTester

玩转TypeScript工具类型(中)

有道技术团队

typescript 大前端 网易有道

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