Skip to content

安装依赖

Bash
pnpm install stylelint stylelint-config-recommended-vue stylelint-config-recommended postcss-scss postcss postcss-html stylelint-config-standard-scss --save-dev

初始化 stylelint 配置 文件

在根目录创建.stylelintrc.js文件

javascript
module.exports = {
  extends: [
    //  渐进式 先通过recommended这两个规则
    "stylelint-config-recommended",
    "stylelint-config-recommended-vue",
    // 之后再用standard这个规则
    "stylelint-config-standard",
    "stylelint-config-standard-vue",
    "stylelint-config-standard-scss",
  ],
  customSyntax: "postcss-scss",
  overrides: [
    {
      files: ["**/*.vue"],
      customSyntax: "postcss-html",
      rules: {
        // Vue 文件特殊规则
        "selector-pseudo-element-no-unknown": [
          true,
          {
            ignorePseudoElements: ["v-deep", "v-global", "v-slotted", ":deep"],
          },
        ],
      },
    },
    {
      files: ["**/*.scss"],
      customSyntax: "postcss-scss",
      rules: {
        // SCSS 特殊规则
        "scss/at-rule-no-unknown": [
          true,
          { ignoreAtRules: ["include", "mixin", "use", "forward"] },
        ],
        "scss/dollar-variable-pattern": null, //变量名允许驼峰
        "scss/at-mixin-pattern": null, //允许驼峰
      },
    },
  ],
  rules: {
    "at-rule-no-unknown": null, // 禁用基础规则
    "no-descending-specificity": null,
    "keyframes-name-pattern": null, // 动画名允许 camelCase
    "selector-class-pattern": null, // 类名允许驼峰
    "selector-id-pattern": null, // id名允许驼峰
    "selector-pseudo-class-no-unknown": [
      true,
      {
        ignorePseudoClasses: ["deep", "global", "slotted"], // Vue 3 作用域选择器
      },
    ],
    "no-invalid-position-declaration": null, // 禁用行内样式(先不禁用)
  },
};

脚本配置

package.json中添加脚本

diff
{
  "scripts": {
+   "lint:style": "stylelint \"src/**/*.{vue,css,scss}\"",
+   "lint:style:fix": "stylelint \"src/**/*.{vue,css,scss}\" --fix"
  },
  "lint-staged": [
    "*.{js,ts,vue}": [
      "eslint --no-ignore --fix",
      "prettier --write"
    ],
+    "*.{css,scss,vue}": [
+      "stylelint --fix"
+    ]
  ],
}