如何在eslint中静音关于被忽略文件的警告

Sim*_*onW 21 eslint

eslint忽略列表中设置并添加一些文件后,每次运行eslint时都会生成有关被忽略文件的警告:

 /path/to/file/name.min.js
  0:0  warning  File ignored because of a matching ignore pattern. Use "--no-ignore" to override
Run Code Online (Sandbox Code Playgroud)

这个警告怎么能被压制?

Jam*_*mie 26

Lint Staged&Husky错误的解决方法

// lint-staged.config.js
const { ESLint } = require("eslint");

const removeIgnoredFiles = async (files) => {
  const eslint = new ESLint();
  const ignoredFiles = await Promise.all(files.map((file) => eslint.isPathIgnored(file)));
  const filteredFiles = files.filter((_, i) => !ignoredFiles[i]);
  return filteredFiles.join(" ");
};

module.exports = {
  "*.{js,ts}": async (files) => {
    const filesToLint = await removeIgnoredFiles(files);
    return [`eslint --max-warnings=0 ${filesToLint}`];
  },
};
Run Code Online (Sandbox Code Playgroud)

如果文件被 ESLint 忽略(即在 中.eslintignore),则此代码片段会过滤该文件,并且不会将其传递给 ESLint CLI。

参考:测试库 - 2022 年 8 月


tib*_*alt 6

我目前知道的一种解决方法是--quiet选项,它禁止显示所有警告。当然,如果您的配置中有“警告”规则,那是没有意义的。

不显示警告的另一种方法是使用目录名:eslint src而不是遍历模式:eslint src/*

  • 使用目录名而不是通配所有文件就成功了! (3认同)

Jen*_*dal 6

您不能,他们不打算修复它,因为他们不认为它是一个错误。因此,如果传入的文件被忽略,则会告诉您它没有处理掉毛规则,因为它被忽略了:https : //github.com/eslint/eslint/issues/5623

在提交之前,我们对pretmit钩子运行了lint代码,因此最终需要编写一些其他代码来区分实际的警告和忽略文件的警告,并且仅当抛出实际的警告或错误时才会失败。


Dar*_*ryn 6

检查您是否正在使用不带引号的 glob 参数运行 eslint 。
如果是这样,请将 glob 放在引号中

  • ? 坏的:eslint src/**
  • ?? 好的:eslint "src/**"

为什么?

如果您使用不在引号中的 cli glob 模式调用 eslint,例如eslint src/**,该 glob 将扩展为所有匹配的文件,并作为 cli 参数的巨大列表传递给 eslint。例如eslint path/to/file/name.min.js src/foo.js src/bar.js src/manymore.js .....

因此,当 eslint 由于您的忽略模式而忽略文件,但该文件已明确作为命令行参数传递时,eslint 会警告我们

eslint 说:
“嗯,因为忽略模式,我忽略了 /path/to/file/name.min.js,但是你明确地将它传递给我给 lint,所以这一定不是你想要的,对吧?”

但是,当您在引号中传递 glob 时,例如eslint "src/**",glob 不会扩展为许多参数;相反,它只是一个字符串参数,而 eslint 知道它是一个 glob,但由于它负责确定要匹配的文件,因此可以在尊重 eslintignore 的同时这样做。所以 eslint 认为它应该警告你并没有什么奇怪的。


dan*_*ymo 6

我在这里找到了真正的答案:

https://github.com/eslint/eslint/issues/5623

我的问题在于我调用 eslint 的方式。我用过eslint src/*不过应该可以eslint src/。(或者在你的情况下它可能eslint .代替eslint *

你收到警告的原因是,通过使用星号,你告诉 eslint 你想要 lint 每个文件,如果你忽略某些文件,这是没有意义的。因此,通过省略星号,您可以让 eslint 来决定要检查的内容,并且它将跳过被忽略的文件,而不会发出任何警告。