CSS代码检查工具stylelint

匿名 (未验证) 提交于 2019-12-02 20:34:42

前面的话

  CSS不能算是严格意义的编程语言,但是在前端体系中却不能小觑。 CSS 是以描述为主的样式表,如果描述得混乱、没有规则,对于其他开发者一定是一个定时炸弹,特别是有强迫症的人群。CSS 看似简单,想要写出漂亮的 CSS 还是相当困难。所以校验 CSS 规则的行动迫在眉睫。stylelint是一个强大的现代 CSS 检测器,可以让开发者在样式表中遵循一致的约定和避免错误。本文将详细介绍CSS代码检查工具stylelint

概述

  stylelint拥有超过150条的规则,包括捕捉错误、最佳实践、控制可以使用的语言特性和强制代码风格规范。它支持最新的CSS语法,并且灵活可配置

Vue

  下面在Vue框架下安装使用stylelint

  1、安装stylelint、stylint-config-standard和stylelint-order

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

  其中,stylelint是运行工具,stylelint-config-standard是stylelint的推荐配置,stylelint-order是CSS属性排序插件

  安装完成后,package.json文件中会自动添加如下字段

    "stylelint": "^9.1.3",     "stylelint-config-standard": "^18.2.0",     "stylelint-order": "^0.8.1",

  2、在根目录下创建.stylelintrc配置文件

{    "extends": "stylelint-config-standard",    "plugins": ["stylelint-order"],   "rules": {     "order/order": [       "declarations",       "custom-properties",       "dollar-variables",       "rules",       "at-rules"     ],     "order/properties-order": [       "position",       "z-index",             "top",       "bottom",       "left",                "right",       "float",       "clear",       "columns",       "columns-width",       "columns-count",       "column-rule",       "column-rule-width",       "column-rule-style",       "column-rule-color",       "column-fill",       "column-span",       "column-gap",             "display",       "grid",       "grid-template-rows",       "grid-template-columns",       "grid-template-areas",       "grid-auto-rows",       "grid-auto-columns",       "grid-auto-flow",       "grid-column-gap",       "grid-row-gap",       "grid-template",       "grid-template-rows",       "grid-template-columns",       "grid-template-areas",       "grid-gap",       "grid-row-gap",       "grid-column-gap",       "grid-area",       "grid-row-start",       "grid-row-end",       "grid-column-start",       "grid-column-end",       "grid-column",       "grid-column-start",       "grid-column-end",       "grid-row",       "grid-row-start",       "grid-row-end",             "flex",       "flex-grow",       "flex-shrink",       "flex-basis",       "flex-flow",       "flex-direction",       "flex-wrap",       "justify-content",       "align-content",       "align-items",       "align-self",       "order",       "table-layout",       "empty-cells",       "caption-side",       "border-collapse",       "border-spacing",       "list-style",       "list-style-type",       "list-style-position",       "list-style-image",       "ruby-align",       "ruby-merge",       "ruby-position",       "box-sizing",       "width",       "min-width",       "max-width",       "height",       "min-height",       "max-height",       "padding",       "padding-top",       "padding-right",       "padding-bottom",       "padding-left",       "margin",       "margin-top",       "margin-right",       "margin-bottom",       "margin-left",             "border",       "border-width",       "border-top-width",       "border-right-width",       "border-bottom-width",       "border-left-width",       "border-style",       "border-top-style",       "border-right-style",       "border-bottom-style",       "border-left-style",       "border-color",       "border-top-color",       "border-right-color",       "border-bottom-color",       "border-left-color",       "border-image",       "border-image-source",       "border-image-slice",       "border-image-width",       "border-image-outset",       "border-image-repeat",       "border-top",       "border-top-width",       "border-top-style",       "border-top-color",       "border-top",       "border-right-width",       "border-right-style",       "border-right-color",       "border-bottom",       "border-bottom-width",       "border-bottom-style",       "border-bottom-color",       "border-left",       "border-left-width",       "border-left-style",       "border-left-color",       "border-radius",       "border-top-right-radius",       "border-bottom-right-radius",       "border-bottom-left-radius",       "border-top-left-radius",       "outline",       "outline-width",       "outline-color",       "outline-style",       "outline-offset",       "overflow",       "overflow-x",       "overflow-y",       "resize",       "visibility",       "font",       "font-style",       "font-variant",       "font-weight",       "font-stretch",       "font-size",       "font-family",       "font-synthesis",       "font-size-adjust",       "font-kerning",               "line-height",       "text-align",       "text-align-last",       "vertical-align",             "text-overflow",       "text-justify",       "text-transform",       "text-indent",       "text-emphasis",       "text-emphasis-style",       "text-emphasis-color",       "text-emphasis-position",       "text-decoration",       "text-decoration-color",       "text-decoration-style",       "text-decoration-line",       "text-underline-position",       "text-shadow",             "white-space",       "overflow-wrap",       "word-wrap",       "word-break",       "line-break",       "hyphens",       "letter-spacing",       "word-spacing",       "quotes",       "tab-size",       "orphans",       "writing-mode",       "text-combine-upright",       "unicode-bidi",       "text-orientation",       "direction",       "text-rendering",       "font-feature-settings",       "font-language-override",       "image-rendering",       "image-orientation",       "image-resolution",       "shape-image-threshold",       "shape-outside",       "shape-margin",       "color",       "background",       "background-image",       "background-position",       "background-size",       "background-repeat",       "background-origin",       "background-clip",       "background-attachment",       "background-color",       "background-blend-mode",       "isolation",       "clip-path",       "mask",       "mask-image",       "mask-mode",       "mask-position",       "mask-size",       "mask-repeat",       "mask-origin",       "mask-clip",       "mask-composite",       "mask-type",       "filter",       "box-shadow",       "opacity",       "transform-style",       "transform",       "transform-box",       "transform-origin",       "perspective",       "perspective-origin",       "backface-visibility",       "transition",       "transition-property",       "transition-duration",       "transition-timing-function",       "transition-delay",       "animation",       "animation-name",       "animation-duration",       "animation-timing-function",       "animation-delay",       "animation-iteration-count",       "animation-direction",       "animation-fill-mode",       "animation-play-state",       "scroll-behavior",       "scroll-snap-type",       "scroll-snap-destination",       "scroll-snap-coordinate",       "cursor",       "touch-action",       "caret-color",       "ime-mode",       "object-fit",       "object-position",       "content",       "counter-reset",       "counter-increment",       "will-change",       "pointer-events",       "all",       "page-break-before",       "page-break-after",       "page-break-inside",       "widows"     ],         "no-empty-source": null,     "property-no-vendor-prefix": [true, {"ignoreProperties": ["background-clip"]}],     "number-leading-zero": "never",     "number-no-trailing-zeros": true,     "length-zero-no-unit": true,     "value-list-comma-space-after": "always",     "declaration-colon-space-after": "always",     "value-list-max-empty-lines": 0,     "shorthand-property-no-redundant-values": true,     "declaration-block-no-duplicate-properties": true,     "declaration-block-no-redundant-longhand-properties": true,     "declaration-block-semicolon-newline-after": "always",     "block-closing-brace-newline-after": "always",     "media-feature-colon-space-after": "always",     "media-feature-range-operator-space-after": "always",     "at-rule-name-space-after": "always",     "indentation": 2,     "no-eol-whitespace": true,     "string-no-newline": null   } }

  3、使用stylelint验证CSS代码即可,如验证src目录下的所有vue文件

react

  react中使用styled-components来书写CSS代码,stylelint同样提供了插件来校验CSS

  1、安装stylelint、stylelint-processor-styled-components、stylelint-config-styled-components、stylelint-config-recommend、stylelint-order

npm install --save-dev stylelint@9.1.3 npm install --save-dev stylelint-processor-styled-components npm install --save-dev stylelint-config-styled-components npm install --save-dev stylelint-config-recommended npm install --save-dev stylelint-order

  2、在根目录下新建配置文件.stylelintrc

{   "processors": ["stylelint-processor-styled-components"],   "extends": [     "stylelint-config-recommended",     "stylelint-config-styled-components"   ],   "plugins": ["stylelint-order"],   "rules": {     "order/order": [       "declarations",       "custom-properties",       "dollar-variables",       "rules",       "at-rules"     ], ... }

  3、同样地,使用stylelint命令即可校验

注意事项

  1、fix命令

  在stylelint的150多条规则中,使用fix命令,可以自动修复一些命令。但是,该fix命令一定要慎用。笔者在使用fix命令后,stylelint将React工程中的所有js文件里的代码全部清除,只留着了下可以识别的css部分

stylelint '**/*.js' --fix

  2、配置scripts

  可以在package.json中配置stylelint的快捷方式

  "scripts": {     "lintcss": "stylelint 'src/**/*.js'"   }

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!