以下文章来自 David Racodon 的客座文章。 David 为这个开源代码质量工具做出了贡献,他将告诉你所有关于它的信息。 我以前从未听说过它,但我知道那里有很多对使用工具来帮助他们控制 CSS 感兴趣的人。 这有点像 CSS lint,但它被形式化为一个接口,用于处理整个项目的代码质量。
CSS 的质量往往会随着时间的推移而下降。 您开始一个新项目,它非常干净。 但是,随着更改和维护的慢慢进行,技术债务会累积起来。 对于拥有许多不同维护人员或员工流动的项目来说,情况会变得更糟。
我遇到的绝大多数 CSS 开发人员都关心他们的代码整洁,而且也觉得他们可以做得更好。
我使用并开发了一个名为 SonarQube 的工具,该工具专门用于开发人员改进代码质量。
什么是 SonarQube?
SonarQube 为包括 CSS 在内的多种语言提供代码质量反馈。 Web 界面提供项目代码质量的概述。

从那里,您可以深入挖掘,SonarQube 可以直接在代码中向您显示问题,例如潜在的错误,例如重复的属性

或跨文件的重复选择器

或任何其他 开发人员的七宗罪。
有 这些功能的演示,您也可以查看。
从哪里开始? 新代码。
如果您现在分析您的代码会怎么样? 如果您幸运的话,您可能只有几十个问题。 但是,如果您有几百个问题呢? 那么您应该从哪里开始着手呢? 换个角度说,如果您的浴缸漏水,您会先开始拖地,还是会先尝试修理漏水? 我相信(至少我希望)你们大多数人会先尝试修理漏水。
SonarQube 提供了您专注于新代码所需的一切:差异视图。 它们允许您将代码的当前状态与之前状态进行比较。(之前状态可能是上次分析、冲刺开始、生产版本等)并突出显示新问题。

在上面的示例中,您只需单击 **+9** 即可显示自上次分析以来的 9 个新问题,并开始修复它们。
它执行哪些 CSS 检查?
目前有 50 多个 可用。 以下是一些示例
潜在的错误
- 重复属性:不好的复制粘贴? 为了跨浏览器支持而设计的? 尽管如此,在这种情况下,注释会很好
- 属性值应有效,否则它们将被浏览器忽略。 它不仅仅是一个基本的 CSS2 验证器,它还考虑了 CSS3 和浏览器普遍接受的值。 查看完整的验证器列表。
编码指南
跨浏览器兼容性
尝试一下
SonarQube 是开源且免费的。 要在两分钟内分析您的代码,可以下载包含 CSS 插件和分析器的 SonarQube 包 此处(请参阅右侧的 **Download ZIP**)。
或者,查看 深入文档。
了解更多
说服了吗? 通过使用您 最喜欢的持续集成服务 自动化代码分析来更进一步。 还有 JavaScript、HTML 和其他语言的插件。 您可以使用它来 查看问题、评估您的技术债务 等等。
关于 CSS 插件的反馈
我和 Tamas Kende 一起为 SonarQube CSS 插件做出了贡献。 我们并不是真正的 CSS 大师,我们相信现有规则可以改进,并且可以添加新规则。 欢迎您提供反馈! 发布到 SonarQube 用户组 或在 Twitter 上 ping 我们,地址是 @kalidasya 和 @DavidRacodon。
第一个错误示例有点吓人。 如果我在样式中写了第二个 **margin-bottom**,那可能是因为我想改变它,无论如何,第二个将覆盖第一个。
所以删除第二个属性定义的建议是 **错误的解决方案**。 它将改变我网站的外观,可能以我不想要的方式。 相反,它应该将第一个标记为不必要的,因为它已被取代。
它在同一个选择器中,所以它不会覆盖任何东西,它只是一个重复。 如果您有另一个具有相同规则的更具体的选择器,则会发生覆盖。
此外,仅仅因为一个规则被另一个规则取代,并不意味着它就是多余的。 它很可能在另一个不太具体的上下文中使用。
Wahoofive 说的完全正确。在具有重复属性的 CSS 规则中,第二个属性始终优先于第一个,因此第一个规则无效。
鉴于此事实,大多数情况下,您需要删除第一个重复项,而不是第二个,因为您的网站一直使用第二个规则提供的 value。
是的,同意。将第一个标记为不必要。
@wahoofive
第一个示例中真正“可怕”的是 `margin-bottom` 属性是重复的。
这在这个例子中肯定是一个错误。这就是 SonarQube 指出问题的原因。然后,您作为开发人员,应该采取适当的补救措施:如果您认为这是正确的修复方法,请删除 `margin-bottom` 的第一个定义。
SonarQube 无法猜测,但可以肯定的是,大多数情况下,第一个定义将被删除。因此,我将在重复属性的第一个出现(而不是最后一个出现)处记录问题:https://github.com/SonarCommunity/sonar-css/issues/133
感谢您的反馈
我只会标记重复的属性,不会建议解决方案。开发人员将不得不检查它以确定哪个是保留的正确选项。而且他是正确的,第二个会覆盖第一个。这与选择器特异性无关;抱歉地说,但你错了,Max。
很棒。描述得很好。谢谢
此致
https://www.bunnytechs.com
我尝试了这篇文章中提到的内容,但发现 CSS 插件存在很多不足之处。它不会处理 SCSS,也不适用于输出压缩的 CSS。它如何融入我的工作流程尚不清楚。
@MrChristopher
也不会处理 Less。但是,我们希望在不久的将来解决这些语言。
SonarQube 是一个用于检查代码质量的工具。因此,对压缩后的 CSS 代码运行它没有意义。您应该在压缩之前对实际的 CSS 代码运行它。因此,您应该在压缩步骤之前添加此代码质量检查。此外,如果代码质量检查不满足某些要求(例如“引入了新的阻断问题”),您可以在代码质量检查后中断构建,请参阅 http://www.sonarqube.org/quality-gates-shall-your-projects-pass/
由于您直接从 SCSS 代码输出压缩的 CSS 代码。真正的价值在于分析您的 SCSS 代码,而不是输出的压缩 CSS 代码。
为什么不直接使用 W3C CSS 验证器呢?
@raj
如本文所述,SonarQube 不仅限于 CSS 验证。请参阅 http://nemo.sonarqube.org/coding_rules#languages=css 中的可用检查。
我遇到
这个错误 Luiss-MacBook-Pro:package-test-sonarqube-css luisbetancourt$ sonarqube-5.1.1/bin/linux-x86-32/sonar.sh start
启动 SonarQube…
sonarqube-5.1.1/bin/linux-x86-32/sonar.sh: 第 417 行:/Users/luisbetancourt/desktop/package-test-sonarqube-css/sonarqube-5.1.1/bin/linux-x86-32/./wrapper: 无法执行二进制文件
SonarQube 启动失败。
Luiss-MacBook-Pro… 看起来你在使用 Mac 机器。
linux-x86-32… 看起来你在尝试运行为 32 位 Linux 机器编写的命令。
你可以尝试运行正确的命令吗?