StyleLint 是『一个强大的、现代化的 CSS 检测工具』, 与 ESLint 类似, 是通过定义一系列的编码风格规则帮助我们避免在样式表中出现错误.

安装stylelint

npm install -d -save-dev stylelint

安装stylint-config-standard和stylelint-order

npm install stylelint-config-standard stylelint-order --save-dev

其中,stylelint是运行工具,stylelint-config-standard是stylelint的推荐配置,stylelint-order是CSS属性排序插件(先写定位,再写盒模型,再写内容区样式,最后写 CSS3 相关属性)。

配置方式:

按顺序查找,任何一项有值,就会结束查找

  • 在 package.json 中的stylelint属性指定规则

  • 在 .stylelintrc 文件中指定,文件格式可以是JSON或者YAML。也可以给该文件加后缀,像这样: .stylelintrc.json , .stylelintrc.yaml , .stylelintrc.yml , .stylelintrc.js

  • stylelint.config.js 文件,该文件 exports 一个配置对象

语法格式:

rules优先级大于extends,建议采用extends方式统一管理

module.exports = {
processors: [],
plugins: [],
extends: "stylelint-config-standard", // 这是官方推荐的方式
rules: {
"at-rule-empty-line-before": "always"|"never",
"at-rule-name-case": "lower"|"upper",
"block-no-empty": true,
}
};

配置项解析

rules

rules是一个对象,属性名为规则名称,属性值为规则取值,它告诉stylelint该检查什么,该怎么报错。所有规则默认都是关闭的。

所有stylelint的规则详情戳这里

规则名称

  • 由连字符组成的小写单词
  • 由两个部分组成:
    • 第一部分描述该规则应用于什么东西
    • 第二部分表示该规则检查了什么
"number-leading-zero"
// ↑ ↑
// the thing what the rule is checking

规则应用于整个样式表时只包含,第二个部分:

"no-eol-whitespace"
"indentation"
// ↑
// what the rules are checking

规则取值

规则类型不同,支持的值也不同,所有取值戳这里,以下是几个示例:

{
"rules": {
"at-rule-blacklist": string|[],
"at-rule-empty-line-before": "always"|"never",
"at-rule-name-case": "lower"|"upper",
"block-no-empty": true
...
}
}

值为 null 时表示禁用该规则:

{
"rules": {
"block-no-empty": null
}
}

除了规则本身的取值之外,stylelint还支持一些自定义配置,给规则传递一个数组即可,数组第一项是规则值,第二项是自定义配置。

"selector-pseudo-class-no-unknown": [true, {
"ignorePseudoClasses": ["global"]
}]

通过配置项,你可以指定:

  • severity,错误级别,取值"warning"或者"error"。默认情况下,所有规则的错误级别都是"error",通过defaultSeverity可以修改此默认值。不过,需要针对某规则修改错误级别就需要用到该属性。
"indentation": [2, {
"severity": "warning"
}]
  • message,自定义错误信息。
"color-hex-case": ["lower", {
"message": "Lowercase letters are easier to distinguish from numbers"
}]

如果你需要严格的定制,写一个自定义格式化器会给你最大控制权

extends 扩展插件

stylelint的配置可以 extend 一个已存在的配置文件(无论是你自己的还是第三方的配置)。当一个配置继承了里一个配置,它将会添加自己的属性并覆盖原有的属性

你也可以将extends设置为一个数组,每一项都是一个独立的stylelint配置项,后一项将会覆盖前一项,而接下来你自己书写的 rules 规则可以覆盖他们所有。

以下示例中,rules中的indentationnumber-leading-zero将会覆盖stylelint-config-standard中对应的规则。

{
"extends": "stylelint-config-standard",
"rules": {
"indentation": "tab",
"number-leading-zero": null
}
}

以下,./myExtendableConfig中的配置将会覆盖stylelint-config-standard中的对应配置,而rules中的indentation将会覆盖./myExtendableConfig中对应的规则。

{
"extends": [
"stylelint-config-standard",
"./myExtendableConfig"
],
"rules": {
"indentation": "tab"
}
}

说清楚优先级之后,我们来详细了解一下extends的取值情况。

extends的值实际上一个定位器(或者一个包含若干定位器的数组),所有可以通过require来使用的资源都可以作为extends的值。因此,可以使用 Node 的 require.resolve() 算法适应任何格式。这意味着一个“定位器”可以是:

  • node_modules中的某个模块名称 ,该模块的主文件需要返回一个配置对象 (比如,stylelint-config-standard;模块的 main 文件必须是一个有效的 JSON 配置)
  • 一个带有 .js 或 .json 扩展名的文件 (which makes sense 如果你在 Node 上下文中创建了一个 JS 对象,并将它传入也是有效的)的绝对路径。
  • 一个带有 .js 或 .json 扩展名的文件的相对路径,相对于引用的配置 (例如,如果 configA 是 extends: "../configB",我们将查找 configB 相对于 configA)。

正因为extends,你可以创建和使用可分享的 stylelint 配置。 如果你要发布你的配置到 npm,在你的 package.json 文件中使用 stylelint-config 关键字。

plugins 插件列表:

插件一般是由社区提供的,对stylelint已有规则进行扩展,一般可以支持一些非标准的css语法检查或者其他特殊用途。一个插件会提供一个或者多个检查规则。

plugins是一个数组,包含一组插件的定位器,这些定位器的取值跟extends一致。

plugins声明后还需要在rules中使用它,具体规则名称以及可能的取值需要去查看每个插件的文档。

{
"plugins": [
"../some-rule-set.js"
],
"rules": {
"some-rule-set/first-rule": "everything",
"some-rule-set/second-rule": "nothing",
"some-rule-set/third-rule": "everything"
}
}

获取更多插件

processors 处理器列表:

你还可以在stylelint的处理流中加入自己的处理函数,就是这里的processors

processors只能作为  命令行  和  Node API  使用,PostCss的插件会忽略它们。

通过processors,我们可以让styleline去处理htmlstyle标签里面的css代码,MarkDown里面的css代码块或者js里面一段包含css的字符串。

使用方法如下:

{
"processors": [
"stylelint-html-processor",
[ "some-other-processor", { "optionOne": true, "optionTwo": false } ]
],
"rules": {..}
}
processors的每一项也是一个定位器,需要额外的参数时,可以传递一个数组,第一项是定位器,第二项是需要的参数。

获取更多处理器。

defaultSeverity

所有在第二个选项中没有指定严重级别的规则的默认严重级别。severity 可用的值为:

  • "warning"
  • "error"

ignoreFiles

一个文件匹配规则,或者一组文件匹配规则,来指定需要忽略的文件。

更高效的忽略文件的方法是通过 .stylelintignore 文件或者调整一下你的文件匹配规则。

ignoreFiles方式

// .stylelintignore
*.js
*.png
*.eot
*.ttf
*.woff

片段禁用规则

/* stylelint-disable */
/* (请说明禁止检测的理由)前端组件限制类名 */
.cropper_topContainer .img-preview {
border: none;
}
/* stylelint-enable */

fix方式

一键fix

在 package.json 中的 scripts 添加指令,然后 npm run lintcss 即可

{
"scripts": {
"lintcss": "stylelint 'src/**/*.css' --fix",
}
}

手动fix

不放心的话,就针对指定文件自己执行, 文件一定要用""括起来

stylelint "src/less/bulma-cloud.less" --fix

问题排除:

错误提示:

Unexpected unknown at-rule "@function" (at-rule-no-unknown) 

Unexpected unknown at-rule "@each" (at-rule-no-unknown) 

Unexpected unknown at-rule "@if" (at-rule-no-unknown) 

Unexpected unknown at-rule "@return" (at-rule-no-unknown)

最开始只安装了官方推荐的定义规则"stylelint-config-standard",我想是不是我缺少插件的问题,所以我就多安装了一个"stylelint-scss"插件,错误已然存在,最后通过"stylelint-scss"的github找到了答案,就是需要添加排除规则。具体内容请点击访问

添加排除规则之后就好了。

{
"extends": [
"stylelint-config-standard",
"stylelint-config-css-modules"
],
"plugins": [
"stylelint-scss"
],
"rules": {
"at-rule-no-unknown": [ true, {
ignoreAtRules: ['extend', 'at-root', 'debug', 'warn', 'error', 'if', 'else', 'for', 'each', 'while', 'mixin', 'include', 'content', 'return', 'function']
}]
}
}

参考:

StyleLint 使用指南的更多相关文章

  1. 如何规范git commit提交

    相信很多人使用SVN.Git等版本控制工具时候都会觉得每次提交都要写一个注释有什么用啊?好麻烦,所以我每次都是随便写个数字就提交了,但是慢慢的我就发现了,如果项目长期维护或者修改很久之前的项目,没有一 ...

  2. VSCode常用插件之vscode-stylelint使用

    更多VSCode插件使用请访问:VSCode常用插件汇总 vscode-stylelint这是一个检验CSS/SASS/LESS代码规范的插件. StyleLint 使用指南 vscode-style ...

  3. Sentry 开发者贡献指南 - 前端(ReactJS生态)

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  4. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  5. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  6. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  7. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  8. const extern static 终极指南

    const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...

  9. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...

随机推荐

  1. [Redis-CentOS7]Redis事务操作(六)

    事务操作 隔离操作: 事务中所有的命令都会序列化,按顺序执行,不会被其他命令打扰 原子操作: 事务中所有的命令要么全部执行,要么全部不执行 添加事务并执行 127.0.0.1:6379> MUL ...

  2. window下建立vue.js项目

    安装node.js 直接下载安装文件安装就可以了 vue项目搭建 .到自己要件项目的文件夹运行cmd命令 .如果没有安装vue-cli .npm install -g vue-cli .vue ini ...

  3. mqttnet3.0用法

    .net常用的mqtt类库有2个,m2mqtt和mqttnet两个类库 当然了,这两个库的教程网上一搜一大把 但mqttnet搜到的教程全是2.7及以下版本的,但3.0版语法却不再兼容,升级版本会导致 ...

  4. Java高级项目实战03:CRM系统数据库设计

    接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...

  5. OpenResty 在马蜂窝广告监测中的应用

    马蜂窝技术原创内容,更多干货请订阅公众号:mfwtech 广告是互联网变现的重要手段之一. 以马蜂窝旅游 App 为例,当用户打开我们的应用时,有可能会在首屏或是信息流.商品列表中看到推送的广告.如果 ...

  6. Javascript 基础学习(七)常用内置对象

    Array 定义 数组也是一个对象,是一个用来存储数据的对象.和Object类似,但是它的存储效率比普通对象要高.数组中保存的内容我们称为元素.数组使用索引(index)来操作元素.索引指由0开始的整 ...

  7. SDMask(iOS蒙层遮罩弹出引导)

    SDMask介绍 地址 针对iOS项目,大部分弹出视图三方都把弹出内容作为了项目的一部分,这种耦合局限性较大.该项目对此解耦,围绕我何时需要使用蒙层而展开设计.将弹出内容和动画和事件完全分离出去让co ...

  8. MySQL - SQL语句优化方法

    1.使用 show status 了解各种 SQL 的执行频率 mysql> show status like 'Com%'; 该命令可以查询 sql 命令的执行次数. 2.定位执行效率较低的 ...

  9. Java虚拟机——JVM

    一.JVM整体架构 1.JVM(Java虚拟机):指以软件的方式模拟具有完整硬件系统功能.运行在一个完全隔离环境中的完整计算机系统,是物理机的软件实现.常用的虚拟机有VMWare.Virtual Bo ...

  10. Python核心编程:《8个实践性建议》

    前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触P ...