Skip to content

stylelint.config.js

js
export default {
  plugins: ['stylelint-order', 'stylelint-less', 'stylelint-prettier'],
  extends: [
    'stylelint-config-standard', // the standard shareable config for Stylelint
    'stylelint-config-html/html', // the shareable html config for Stylelint.
    'stylelint-config-html/vue', // the shareable vue config for Stylelint.
    'stylelint-config-recess-order', // use the clean order for properties
  ],
  rules: {
    'prettier/prettier': true,
    // 禁止在覆盖高特异性选择器之后出现低特异性选择器
    'no-descending-specificity': null,
    // 禁止空源码
    'no-empty-source': null,
    // 禁止字体族中缺少泛型族关键字
    'font-family-no-missing-generic-family-keyword': null,
    // 禁止未知的@规则
    'at-rule-no-unknown': [
      true,
      {
        ignoreAtRules: [
          'tailwind',
          'apply',
          'variants',
          'responsive',
          'screen',
          'function',
          'if',
          'each',
          'include',
          'mixin',
          'extend',
          'content',
          'use',
        ],
      },
    ],
    // 不允许未知函数
    'function-no-unknown': null,
    // 不允许未知单位
    'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }],
    // 不允许选择器使用供应商前缀
    'selector-no-vendor-prefix': null,
    // 指定类选择器的模式
    'selector-class-pattern': null,
    // 不允许值使用供应商前缀
    'value-no-vendor-prefix': null,
    // 要求或禁止在规则之前的空行
    'rule-empty-line-before': ['always', { ignore: ['after-comment', 'first-nested'] }],
  },
  ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts', '**/*.vue'],
  overrides: [
    {
      files: ['**/*.vue'],
      customSyntax: 'postcss-html',
      rules: {
        // 禁止未知的伪类选择器
        'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['deep', 'global'] }],
        // 禁止未知的伪元素选择器
        'selector-pseudo-element-no-unknown': [true, { ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'] }],
        // 禁用所有可能引起问题的规则
        'at-rule-no-unknown': null,
        'function-no-unknown': null,
        'unit-no-unknown': null,
        'property-no-unknown': null,
        'selector-type-no-unknown': null,
        'no-unknown': null,
        'no-empty-source': null,
        'block-no-empty': null,
        'comment-no-empty': null,
        'rule-empty-line-before': null,
        'declaration-no-important': null,
        'declaration-block-no-duplicate-properties': null,
        'declaration-block-no-shorthand-property-overrides': null,
        'declaration-block-trailing-semicolon': null,
        'declaration-colon-space-after': null,
        'declaration-colon-space-before': null,
        'declaration-empty-line-before': null,
        'length-zero-no-unit': null,
        'max-empty-lines': null,
        'no-duplicate-at-import-rules': null,
        'no-duplicate-selectors': null,
        'no-extra-semicolons': null,
        'no-missing-end-of-source-newline': null,
        'number-leading-zero': null,
        'number-no-trailing-zeros': null,
        'string-no-newline': null,
        'value-list-comma-newline-after': null,
        'value-list-comma-space-after': null,
        'value-list-comma-space-before': null,
        'value-list-max-empty-lines': null,
        'color-no-invalid-hex': null,
        'font-family-no-duplicate-names': null,
        'font-family-no-missing-generic-family-keyword': null,
        'function-calc-no-unspaced-operator': null,
        'function-linear-gradient-no-nonstandard-direction': null,
        'keyframe-declaration-no-important': null,
        'media-feature-name-no-unknown': null,
        'no-invalid-double-slash-comments': null,
        'selector-attribute-brackets-space-inside': null,
        'selector-attribute-operator-space-after': null,
        'selector-attribute-operator-space-before': null,
        'selector-attribute-quotes': null,
        'selector-combinator-space-after': null,
        'selector-combinator-space-before': null,
        'selector-descendant-combinator-no-non-space': null,
        'selector-max-id': null,
        'selector-max-universal': null,
        'selector-no-qualifying-type': null,
        'selector-no-vendor-prefix': null,
        'selector-pseudo-class-case': null,
        'selector-pseudo-class-parentheses-space-inside': null,
        'selector-pseudo-element-case': null,
        'selector-pseudo-element-colon-notation': null,
        'selector-type-case': null,
        'shorthand-property-no-redundant-values': null,
        'string-quotes': null,
        'unit-case': null,
        'value-keyword-case': null,
        'value-no-vendor-prefix': null,
      },
    },
    {
      files: ['**/*.(css|html)'],
      customSyntax: 'postcss-html',
      rules: {
        // 禁止未知的伪类选择器
        'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['deep', 'global'] }],
        // 禁止未知的伪元素选择器
        'selector-pseudo-element-no-unknown': [true, { ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'] }],
      },
    },
    {
      files: ['*.sass', '**/*.sass'],
      customSyntax: 'postcss-sass',
      extends: ['stylelint-config-standard-sass'],
    },
  ],
};