写点什么

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

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

关注

评论

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

微服务架构指南

看山

微服务架构 内容合集 签约计划第二季 技术专题合集

[Pulsar] 消息从Broker到Consumer的历程

Zike Yang

Apache Pulsar 12月日更

毕业设计

Li. Mr

架构实战营 - 毕业总结

Alex.Wu

工程师文化:BAT 为什么不喊老板

大龄程序员老羊

CTO 工程师文化 互联网创业

第八模块

Li. Mr

公司的电脑总是卡顿——因为缺少工程师文化

大龄程序员老羊

CTO 工程师文化 互联网创业

架构实战训练营-模块1-作业

温安适

「架构实战营」

架构4期模块一作业

曾竞超

架构实战营

第四模块

Li. Mr

聊聊工作界面

Justin

工作效率 沟通 28天写作 沟通界面

DDD领域驱动设计落地实践系列

慕枫技术笔记

内容合集 签约计划第二季

对比 volatile vs synchornized

悟空聊架构

volatile 28天写作 悟空聊架构 12月日更

在线JSON在线对比差异工具

入门小站

工具

架构训练营毕业总结

apple

极客时间算法训练营 Week03

jjn0703

学习心得 - 架构训练营 - 毕业设计项目

Fm

除了微服务,我们还有其他选择吗?

看山

容器 微服务架构 无服务器云函数 SOA 签约计划第二季

毕业设计项目:设计电商秒杀系统

apple

架构实战营第4期--模块一作业

烈火干柴烛灭田边残月

架构实战营

如何实现单体架构到微服务架构的蜕变?

看山

微服务架构 单体架构 签约计划第二季

Java 面向对象精讲【中】

XiaoLin_Java

面向对象 死磕 Java 基础 12月日更

模块七作业

bob

「架构实战营」

电商业务服务拆分

🌾🌾🌾小麦🌾🌾🌾

架构实战营

极限数据 v0.2 版本正式发布了

极限实验室

elastic console Elastic Search 极限数据平台 ES多集群管理

专注的力量

卢卡多多

28天写作

设计电商秒杀系统

白开水又一杯

#架构实战营

MySQL 配置文件 my.cnf / my.ini 逐行详解

蒋川

MySQL 数据库

系统化思维 VS 场景化思维

Ian哥

思维模式 系统性思维 场景化思维

拆分电商系统为微服务

deng

架构实战营

MySQL探秘(五):InnoDB锁的类型和状态查询

程序员历小冰

MySQL 28天写作 12月日更

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