写点什么

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

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

关注

评论

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

双报到系统(源码+文档+部署+讲解)

深圳亥时科技

HarmonyOS 5.0应用开发——抽屉布局SideBarContainer

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——图像PixelMap压缩保存

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0

用 GreptimeDB 和 Metabase 解锁时序数据洞察的无限潜力

Greptime 格睿科技

数据分析 时序数据库 数据可视化

养护系统

深圳亥时科技

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

字节跳动数据平台

数字身份发展趋势前瞻:增强用户体验

芯盾时代

数字身份 iam 统一身份认证

智慧无界,Hi MateBook系列重塑全场景智慧办公体验,首发4599元起

极客天地

超完整性能报告合集!GreptimeDB 多场景性能对比和深度解析来了

Greptime 格睿科技

Grafana 时序数据库 SQLite 数据库的工具 性能报告

EMR Serverless Spark:一站式全托管湖仓分析利器

阿里云大数据AI技术

大数据 Serverless 数据分析 云原生 EMR

剧本杀平台(源码+文档+部署+讲解)

深圳亥时科技

大模型退潮,奇点将至|StartDT Talk

奇点云

AI

HarmonyOS 5.0应用开发——文件读写

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0 HarmonyOS NEXT

物联网监控数据采集,传输和存储方案:使用 GreptimeDB 和 YoMo

Greptime 格睿科技

数据库 物联网 集成 数据监控

WEB 3D CAD中绘制一个窗户模型

WEB CAD SDK

STP CAD 2023下载

HarmonyOS 5.0应用开发——RCP框架的使用

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——多种方式实现图片解码

高心星

鸿蒙 HarmonyOS HarmonyOS框架 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——图像PixelMap变换

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

HarmonyOS 5.0应用开发——Navigation实现页面路由

高心星

鸿蒙 HarmonyOS 应用开发 鸿蒙5.0 HarmonyOS NEXT

通过Forcebot压测实践简述“并发模式”与“RPS模式”两种模式的区别

京东零售技术

遇到慢查询怎么办?一文解读MySQL 8.0查询分析工具

华为云开发者联盟

MySQL sql EXPLAIN 慢查询分析

HarmonyOS 5.0应用开发——RCP框架实现断点续传

高心星

鸿蒙 HarmonyOS 鸿蒙5.0 HarmonyOS NEXT

浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题

vivo互联网技术

运维 TiKV

CST电磁仿真教程:如何进行时域自适应网格设置

思茂信息

网络 仿真 cst

小间距LED显示屏前维护的意义

Dylan

产品 厂商 LED显示屏 屏幕

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