玩转StyleLint
本文最后更新于:5 个月前
本文由浅入深,依次介绍了Stylelint的入门使用、进阶配置、常用实践。适合新手小白快速上手Stylelint的使用
玩转StyleLint(新手向)
在网上查找学习StyleLint资料的时候,发现很多文章将Stylelint和ESLint、Prettier等其它工具混在一起讲,这并不利于较为系统完整地了解Stylelint这个工具。于是就有了这篇专门讲解StyleLint入门的比较全面一点的文章
一、基本用法
1. 使用介绍
第一步,安装依赖模块和官方的standard
配置文件
1 |
|
第二步,创建.stylelintrc
配置文件,然后输入
1 |
|
第三步(但是通常我们不这么做,而是跳到第四步,直接使用插件),在命令行中输入以下命令,即可检查所有css
文件
1 |
|
如果想要再检查的同时,根据配置规则对代码进行修复,加上--fix
参数即可(并不是所有规则都能修改,不能自动修改的部分,会输出到命令行)
1 |
|
第四步,安装VSCode插件Stylelint
,这样在编辑过程中即可实时看到检查结果,方便及时修改。


然后再结合上VSCode的【保存时自动修复】
setting.json

这样每次保存文件时,就会自动完成stylelint的修复(而不需要手动输入命令了!)
2. 使用须知
- Stylelint所有的规则默认都是关闭的,所以如果不设置
extends
、plugins
、rules
等任一属性时,Stylelint是没有任何作用的! - 自动修复并不是对所有rules都管用的!,具体规则是否支持自动修复,可以查询规则 | Stylelint 中文网。

- Stylelint默认的检查范围是当前项目下所有css文件,除了
node_modules/
。
二、自定义配置
1. 配置文件类型
stylelint 支持多种形式的配置文件,按照优先级由高到低排列依次如下:
.stylelintrc
文件(最常用),加或者不加后缀均可。可添加的后缀包括:.yaml
(或.yml
)、.json
stylelint.config.js
文件- 在package.json文件中添加
stylelint
属性并添加规则
下面给出示例:
.stylelintrc文件
1 |
|
stylelint.config.js文件
1 |
|
package.json中的stylelint属性(暂时没找到案例,待补充!!)
1 |
|
2. 配置属性
1 |
|
下面为每项配置列举一些例子
2.1 extends
extends
属性接受一个字符串,或者一个字符串数组。这些字符串为:
- 第三方配置名(需要安装对应的npm包)
- 自定义配置文件的绝对路径/相对当前配置文件的路径
1 |
|
1 |
|
当同时扩展多个配置文件时,如果多个文件中有重复的规则属性,此时的覆盖关系为:后面文件中规则的覆盖前面文件中的规则。
同时,你还可以再当前的stylelint配置文件中,通过rules
属性中规则,覆盖扩展配置文件中的对应规则。
2.2 plugins
plugins
的作用也是扩展规则配置。
extends
中指定的是标准的stylelint配置文件;plugins
中指定的是插件,这些插件可以支持方法、非标准CSS功能来实现一些更复杂的功能。
plugins
属性接受一个数组,数组元素可以是:
- npm模块名
- 插件的绝对路径/相对当前配置文件的路径
1 |
|
2.3 rules
rules
属性接受一个对象,用于指定具体的规则
rules的值可以是以下形式之一:
- 一个值:选项
- 包含两个值的数组:主选项、辅助选项(通常用来配置补充属性)
- null:关闭规则
1 |
|
【扩展链接】
- rules列表(中文版):规则 (docschina.org),缺点:只解释了规则含义,没有给出取值类型;并且不全
- rules列表(官方原版):Rules | Stylelint
2.4 overrides
使用 overrides
属性,你可以指定要应用配置的文件子集。
接受一个数组,数组对象:
- 必须包含
files
属性,是一个glob模式数组,用于指定文件范围 - 至少包含一个其它配置属性
1 |
|
2.5 customSyntax
指定要在代码上使用的自定义语法,通常在需要检查多种不同的语言(如html、sass、less等)时,在overrides
属性中使用。customSyntax | Stylelint
1 |
|
2.6 ignoreFiles
你可以提供一个 glob 或 glob 数组来忽略特定文件。
1 |
|
注意:如果需要忽略较多文件,请使用 .stylelintignore 文件!
2.7 allowEmptyInput
当 glob 模式不匹配任何文件时,Stylelint 不会抛出错误。
1 |
|
三、extends & plugins
1. 常用第三方配置
- stylelint-config-standard,官方标准共享配置,继承自
stylelint-config-recommended
- stylelint-config-recommended,官方推荐共享配置,主要用于避免css错误
- stylelint-config-recess-order,Bootstrap使用的css order规则
- stylelint-config-prettier,关闭了所有可能与Prettier冲突的stylelint规则
- stylelint-config-recommended-vue,官方推荐共享Vue配置,继承
stylelint-config-recommended
并捆绑了postcss-html
2. 常用插件
- stylelint-order,css order插件,需要搭配rules属性中的
order/order
、order/properties-order
使用 - stylelint-less,Less特定的stylelint规则集合
四、常用rules
参考链接:规则 | Stylelint 中文网 (nodejs.cn)
rules的值可以是以下形式之一:
- 一个值:选项
- 包含两个值的数组:主选项、辅助选项(通常用来配置补充属性)
- null:关闭规则
rule | 说明 | 取值范围 |
---|---|---|
no-descending-specificity |
禁止「更高针对性的选择器」出现在「更低针对性的选择器」后面 | true |
length-zero-no-unit |
不允许使用零长度单位 | true |
property-disallowed-list |
指定不允许的属性列表 | 字符串、字符串数组、正则表达式 用于指定不允许出现的css属性 |
unit-disallowed-list |
指定不允许的单位列表 | |
comment-empty-line-before |
要求或禁止注释前有空行 | “always”——注释之前必须有空行 “never”——注释之前不能有空行 |
rule-empty-line-before |
要求或禁止规则块前有空行 | “always”——规则块之前必须有一个空行 “never”——不能有空行 |
selector-class-pattern |
指定类选择器的模式 | regex / 字符串(或被转换成regex) 不需要带前缀 . |
五、常用实践
1. 忽略stylelint检查
1.1 使用配置注释忽略
第一种,如果只声明 disable
,不声明enable
,那么将从声明disable
处,忽略到文件末尾
1 |
|
第二种,先后声明 disable
和enable
,忽略的范围在两者之间
第三种,使用disable + 具体规则
的模式忽略指定的rule,例如:/* stylelint-disable selector-class-pattern */
1.2 使用.stylelintignore
匹配模式与.gitignore
的语法一致
1 |
|
1.3 使用 ignoreFiles属性
1 |
|
1.4 关闭规则
直接在 stylelint 配置文件的 rules
属性中使用 null
关闭指定的规则,对所有文件生效!
1 |
|
2. css声明顺序
注意,这里的「顺序」指的是css块内部的「属性顺序」,不包含「css选择器的顺序」(这个顺序可以通过ESLint来进行约束)
2.1 stylelint-config-recess-order
第一种方式,使用stylelint-config-recess-order,这个属于第三方配置,是Bootstrap使用的css order规则。
它有两层顺序,外层的顺序是关联规则块的顺序,eg:position->display->flexible mode等等;内层的顺序是规则块内部的顺序,以position block为例:position->top->right->bottom等等。
第一步,安装stylelint
和stylelint-config-recess-order
1 |
|
第二步,在.stylelintrc
声明扩展配置文件
1 |
|
第三步,配置VSCode的保存时自动修复
setting.json

完成配置!如图,当顺序不符和规范时,会有报错提示。点击保存后,可以自动完成修复!

2.2 stylelint-order
第二种方式,使用stylelint-order,它是plugins插件,需要搭配 rules 属性才能发挥作用
第一步,安装stylelint
和stylelint-config-order
1 |
|
第二步,在.stylelintrc
声明plugins和rules
1 |
|
第三步,配置VSCode的保存时自动修复
setting.json

完成配置!如图,当顺序不符和规范时,会有报错提示。点击保存后,可以自动完成修复!

3. css块之间空行隔开
相应属性:rule-empty-line-before | Stylelint 中文网 (nodejs.cn)
1 |
|
通过以上配置,可以让css规则块之间有空行隔开,但无法控制只有一个空行,有多个空行也不会报错。同时,会将注释也用空行隔开(有时这并不是我们所期望的)

1 |
|
通过设置辅助属性,可以改变这一状况

3. 解决和Prettier的冲突
项目中如果同时存在 Stylelint 和 Prettier ,可能会存在rule冲突。为了解决这个问题,需要在Stylelint中安装一个扩展
1 |
|
并在stylelint配置文件中声明
1 |
|
如果,到这一步进行顺利,下面的内容可以跳过。如果在安装过程中出现报错,可以继续往下看
但是,在安装过程中,报错了,错误原因部分截图如下:

大意是:Stylelint的版本超前了,styelint-config-prettier
的版本更新没有跟上,导致版本冲突了,这里的解决思路是:降低Stylelint的版本。首先查看一下可用版本
1 |
|
不需要卸载,直接重装覆盖
1 |
|
但是,这又引发了新的问题,原本和stylelint@15.0.8
搭配的stylelint-config-recess-order@4.2.0
发生版本冲突了,所以需要把它也重装一遍
1 |
|
运行以上命令后,你会发现,还是报错,原因也是版本冲突:stylelint-config-recess-order
和stylelint
版本冲突了,这里的原因是因为(敲重点了!):npm install
默认只会安装package最新的版本,所以如果需要安装之前的版本,需要我们手动指定。
下一个问题来了:我也不知道哪个版本的stylelint-config-recess-order
能够兼容stylelint@14.6.1
呀?解决办法:到 stylelint-config-recess-order - npm (npmjs.com) 里面查看历史版本中下载次数最多,并且大概猜测能够和stylelint@14.6.1
发行时间相近的那个版本,然后安装一下尝试一下,大概率是OK的!(如果不OK,换一个版本再试安装一次)
1 |
|
最后,回到正题!
1 |
|
安装成功!

参考资料
配置 | Stylelint 中文网 (nodejs.cn)
前端规范之CSS规范(Stylelint) - Yellow_ice - 博客园 (cnblogs.com)
Stylelint - 用户指南 - 插件 | Plugins - 开发者手册 - 腾讯云开发者社区-腾讯云 (tencent.com)