使用 stylelint 从 linting 中排除导入的供应商文件

Exclude imported vendor files from linting with stylelint

我想使用 stylelint 正确排除导入的供应商文件。我有这个 app.scss:

@import '~bootstrap';
@import '~bootstrap-vue';

body {
  background: gray;
}

和这个 .stylelintrc.json:

{
  "extends": "stylelint-config-standard"
}

在编译期间(使用 Webpack Encore)我收到超过 8000 个警告,例如:

 warning  in ./assets/scss/app.scss

Module Warning (from ./node_modules/postcss-loader/src/index.js):
Warning

(9998:1) Expected selector ".input-group-sm > .custom-range" to come before selector ".input-group > .form-control-plaintext + .custom-range" (no-descending-specificity)

我想要的是0个警告和0个错误。实现这一目标的正确方法是什么?

备注

我已经尝试了很多,例如这个:

/* stylelint-disable */
@import '~bootstrap';
@import '~bootstrap-vue';
/* stylelint-enable */

有了这个,8000 条警告就消失了,但我收到另一个警告:

(11596:1) Unexpected duplicate selector "body", first used at line 56 (no-duplicate-selectors)

我还尝试通过使用以下选项编辑 .stylelintrc.json 来完成我想要的:ignoreFilesignorePathseveritydefaultSeverity。我无法让它工作。

来自docs

You can use a .stylelintignore file (or point to another ignore patterns file) to ignore specific files.

These files will be excluded from the files glob before the file system is check at all, so it is an efficient method for ignoring lots of files.

因此添加一个 .stylelintignore 文件,其中包含要忽略的路径,

node_modules/

真正解决我问题的是将覆盖 bootstrap 样式的样式添加到禁用样式中。

/* stylelint-disable */
@import '~bootstrap';
@import '~bootstrap-vue';
body {
  background: gray;
}
/* stylelint-enable */

我在使用 postcss-easy-importstylelint 的组合时遇到了同样的问题。我的问题是加载 stylelint 作为 PostCSS 的直接插件,而它应该作为 postcss-easy-import.

的插件加载

之前的 PostCSS 配置

module.exports = ( cfg ) => {
  return {
    plugins: [
      require( 'postcss-dart-sass' )({
        includePaths: [ ... ]
      }),
      require( 'postcss-easy-import' )({
        prefix: '_',
        extensions: ['.scss', '.css']
      }),
      require( 'stylelint' )({
        cache: true,
        cacheLocation: '/tmp/.stylelintcache',
        ignorePath: '.stylelintignore'
      })
    ]
  };
};

PostCSS 配置后

module.exports = ( cfg ) => {
  return {
    plugins: [
      require( 'postcss-dart-sass' )({
        includePaths: [ ... ]
      }),
      require( 'postcss-easy-import' )({
        prefix: '_',
        extensions: ['.scss', '.css'],
        plugins: [
          require( 'stylelint' )({
            cache: true,
            cacheLocation: '/tmp/.stylelintcache',
            ignorePath: '.stylelintignore'
          })
        ]
      })
    ]
  };
};