ChatGPT解决这个技术问题 Extra ChatGPT

关闭特定文件的 eslint 规则

是否可以关闭整个文件的 eslint 规则?例如:

// eslint-disable-file no-use-before-define 

(类似于 eslint-disable-line。)它经常发生在我身上,在某个文件中,我在许多地方违反了对该文件认为可以的特定规则,但我不想禁用整个项目的规则,我也不想禁用该特定文件的其他规则。

您可以将规则添加为文件的第一行,如下所示: /*eslint no-use-before-define: 2*/
完美,有效,谢谢。我只是忽略了文档中的部分:eslint.org/docs/user-guide/configuring.html#configuring-rules
这里有这么多重复的答案。如果一个模组可以删除除第一个答案之外的所有 /* eslint-disable */ 个答案,那就太好了

A
A1rPun

您可以通过将配置放在文件顶部来关闭/更改文件的特定规则。

/* eslint no-use-before-define: 0 */  // --> OFF

or

/* eslint no-use-before-define: 2 */  // --> ON

More info


有没有办法在 .eslintrc 中放置一个规则,将所有像这样的文件特定规则强制到文件的顶部?
@Jeremy 看到我的回答。您只需将 .eslintignore 文件添加到您的项目根目录。
我试过 /* eslint-disable rule-name */ 它工作
这个答案中的双重注释格式误导了我。
@杰里米是的。我设计了一种从特定文件或文件夹中删除特定规则的方法。请在此处查看我的答案:stackoverflow.com/a/65069069/7644846 @prograhammer 将文件放在 .eslintignore 将禁用文件中的所有规则。但是@Jeremy 想要禁用文件中的特定规则。
m
mikemaccana

要禁用文件的特定规则:

/* eslint-disable no-use-before-define */

请注意,eslint 中有一个错误,其中单行注释不起作用 -

// eslint-disable max-classes-per-file
// This fails!

Check this post


这将禁用该块中的所有 eslint 规则,而不仅仅是要忽略的 no-use-before-define
基本上这就是整个想法。问题是“是否可以关闭整个文件的 eslint 规则?”
@Wahome“是否可以关闭整个文件的 eslint 规则?”规则这个词是单数的。您的回答关闭了所有复数规则。
在描述中,他提到他想要禁用特定规则之类的东西——再读一遍这个问题!
是的,这并没有解决整个问题,但仍然是一个有用的答案,因为这个线程是谷歌搜索“eslint 忽略文件”时的最佳结果
A
Aidin

让我们像往常一样对场景进行细分,亲爱的开发人员!

这里有两个问题要问自己,首先。

问题一:你想忽略多少“规则”?

所有规则 一个或多个特定规则(例如报价或半规则)

问题二:您要忽略多少“行/文件”?

一行或多行 一个或多个文件中的所有行 无处不在

现在,根据您的回答,有 2 × 3 = 6 个案例。

1)禁用“所有规则”

案例 1.1:您想禁用“一条或多条线”的“所有规则”

有两种方法可以做到这一点:

将 /* eslint-disable-line */ 放在行尾,或 /* eslint-disable-next-line */ 就在该行之前。

案例 1.2:您想禁用“一个文件”的“所有规则”

将 /* eslint-disable */ 的注释放在文件顶部。

案例 1.3:您想禁用“某些文件”的“所有规则”

有 3 种方法可以做到这一点:

您可以使用 1.2 并在文件顶部逐一添加 /* eslint-disable */。您可以将文件名放在 .eslintignore 中。这很好用,特别是如果您有一条希望被忽略的路径。 (例如 apidoc/**) 或者,如果您不想拥有单独的 .eslintignore 文件,您可以按照此处的说明在 package.json 中添加 "eslintIgnore": ["file1.js", "file2.js"] .

2)禁用“一些规则”

案例 2.1:您想为“一行或多行”禁用“某些规则”

有两种方法可以做到这一点:

您可以将 /* eslint-disable-line quotes */ (用您的规则替换引号)放在行尾,或 /* eslint-disable-next-line no-alert, quotes, semi */ before线。

专业提示:如果您有多个要忽略相同规则的行,您可以禁用和启用这样的规则:

// Assume these lines are long engouh that max-len is gonna trigger

/* eslint-disable max-len */
console.log("I am a loooooooooo...ooooong line 1, but eslint doesn't bug!");
console.log("I am a loooooooooo...ooooong line 2, but eslint doesn't bug!");
console.log("I am a loooooooooo...ooooong line 3, but eslint doesn't bug!");
/* eslint-enable max-len */
console.log("I am a loooooooooo...ooooong line 4, AND eslint's GONNA CRY!"); // <--- eslint is gonna cry over this one only!

案例 2.2:您想为“一个文件”禁用“某些规则”

将 /* eslint-disable no-use-before-define */ 注释放在文件顶部。

更多示例 here

案例 2.3:您想为“某些文件”禁用“某些规则”

这不那么简单。您应该在 .eslintrc 中创建一个“覆盖”部分,并指定应该为哪些 glob/文件禁用/修改哪些规则。在这个答案中可以找到一个例子。


PS。案例 5:您要禁用“所有文件”的“所有规则”——npm uninstall eslint! :p
另请注意,您只能对 eslint-disable 使用 /* */ 样式注释。 // eslint-disable no-use-before-define 行不通。但它适用于 // eslint-disable-next-line
在我阅读您的评论时,我正好需要 案例 2.3,但您的回答并未完全解释。对于任何想了解案例 2.3 的人,这里有完整的解释:stackoverflow.com/a/65069069/7644846。 PS:如果您想禁用特定文件的特定规则,"excludedFiles" 不起作用。
感谢@victor 引起我的注意。似乎 eslint 文档链接已更改。我更新了它们,并参考了您对 2.3 的回答。 :) 谢谢!
+1 是 TypeScript 的新手,这个 eslint 东西让我发疯了,但我不想关闭它,因为许多警告都很有用。这个答案拯救了一天!
p
prograhammer

您可以通过在项目的根目录中创建一个 .eslintignore 文件来告诉 ESLint ignore specific files and directories

.eslintignore

build/*.js
config/*.js
bower_components/foo/*.js

忽略模式的行为符合 .gitignore 规范。 (不要忘记重新启动编辑器。)


是否可以仅忽略此文件中的特定规则?
非常好!还可以使用**递归方式在目录、子目录、子子目录中添加文件。例如:spec/javascripts/**/*.js
完美 - 这对于自动生成和频繁更改的文件特别有用(例如,如果您使用 AWS 的 Amplify 或 MobileHub,则为 aws-exports.js)
这仍然给出警告
此答案从这些文件中禁用 all 规则。为了从文件中删除 具体 规则,您可以查看我的回答 stackoverflow.com/a/65069069/7644846
e
eppsilon

您还可以禁用/启用这样的规则:

/* eslint-disable no-use-before-define */
... code that violates rule ...
/* eslint-enable no-use-before-define */

类似于问题中提到的 eslint-disable-line。如果您不想在重新启用复杂的规则配置时恢复它,这可能是一种更好的方法。


我更喜欢这个,因为它恢复了我在 eslint 配置中定义的级别(警告、错误)。
这是对我有用的解决方案。关闭和打开规则不起作用。
在您的代码库中使用此模式的问题是,未来在自己的文件上执行此操作的开发人员会忘记重新启用它。 (当您不重新启用时,很难看出区别。)这就是为什么我个人更喜欢 // esint-disable-line/* eslint-disable-next-line */ 仅用于一行。在我的回答中找到更多详细信息:stackoverflow.com/a/56719951/2321594
A
Andriy

最好在 .eslintrc.js 配置文件中添加“覆盖”。例如,如果您不想为所有以 Actions 结尾的 js 文件禁用驼峰式规则,请将此代码添加到 .eslintrc.js 中的规则范围之后。

"rules": {    
...........    
},
"overrides": [
 {
  "files": ["*Actions.js"],
     "rules": {
        "camelcase": "off"   
     }
 }
]

它不回答 OP 关于特定文件的问题。
效果很好!恕我直言,这应该是公认的答案。这种方式保留在 eslintrc 文件中(保持源文件干净),并且可以覆盖特定文件的特定规则的行为。 +1
适用于 *.d.ts 文件,因此您可以停止对 no-unused-varsmax-classes-per-fileno-use-before-define 之类的类型定义发出 linting 警告
@akagixxer,但您无法使用此方法控制一个实例(即行)。 OTOH,将它放在代码本身中会使每个人都更清楚您正在做一件“坏”的事情,但例外是合理的。此外,我在 stackoverflow.com/a/56719951 的回答包含不同的方法。
D
Dávid Molnár

要暂时禁用文件中的规则警告,请使用以下格式的块注释:

/* eslint-disable */

这将禁用 ESLint,直到

/* eslint-enable */

发表评论。

您可以阅读有关此主题的更多信息here


问题的最佳答案
V
Victor

要禁用文件夹内文件的特定规则,您需要使用 .eslintrc 配置文件的 "overrides" 键。

例如,如果要删除以下规则:

no-use-before-define max-lines-per-function

对于以下主目录中的所有文件:

/spec

您可以将此添加到您的 .eslintrc 文件中...

"overrides": [
  {
    "files": ["spec/**/*.js"],
    "rules": {
      "no-use-before-define": ["off"],
      "max-lines-per-function": ["off"]
    }
  }
]

请注意,我在 spec/**/*.js glob 中使用了 **,这意味着我正在递归查找名为 spec文件夹 内的所有 子文件夹 并选择所有文件以 js 结尾,以便从中删除所需的规则。


IMO 这种方法会使维护变得更加困难。未来的开发人员想要知道为什么禁用某个规则,必须查看很多地方。将规则覆盖集中在一个位置(一个 .eslintrc/.eslintignore)或按行/文件执行,或两者兼而有之,可能会更容易。
我不明白您的担忧,因为这种方法将规则覆盖完全集中在一个地方:.eslintrc 文件。
我懂了。我的印象是您正在谈论将多个 .eslintrc 文件放在不同的文件夹中。我的错。 :)
s
sfletche

接受的答案对我不起作用(可能是不同版本的 eslint...?我正在使用 eslint v3.19.0),但确实找到了以下解决方案...

将以下内容放在文件顶部

/* eslint-disable no-use-before-define */

这将禁用整个文件的规则


...或多个,例如 /* eslint-disable no-unused-vars, no-console, import/no-extraneous-dependencies, spaced-comment */
同样,接受的答案对我不起作用。两个区别:将 eslint 更改为 eslint-disable 并删除 : 0。使用 eslint@4.19.1。
H
Hugo Elhaj-Lahsen
/* eslint-disable */

//suppress all warnings between comments
alert('foo');

/* eslint-enable */

这将禁用块内的所有 eslint 规则。


这将禁用该块中的所有 eslint 规则,而不仅仅是要忽略的 no-use-before-define
这对我有帮助,谢谢!还要考虑这个问题的答案,禁用所有规则也会禁用预期的规则
真的不是一个好习惯。仅仅因为你想做一件“非正统”的事情,不应该证明完全混乱是正当的。 :) 有关详细信息,请参阅我在 stackoverflow.com/a/56719951 的答案。
f
fjplaurr

简单有效。

Eslint 6.7.0 带来了 "ignorePatterns" 以将其写入 .eslintrc.json 中,如下例所示:

{
    "ignorePatterns": ["fileToBeIgnored.js"],
    "rules": {
        //...
    }
}

See docs


请注意,它会忽略“全部”“ENTIRE”文件的规则。如果您想要更详细的信息,请查看我在 stackoverflow.com/a/56719951 的答案
T
Timbergus

如果你想为一个规则禁用 ESLint,你可以将它添加到文件的顶部:

/* eslint-disable NAME_OF_THE_RULE */

如果要在文件中禁用 ESLint 或 TypeScript 检查,可以在文件顶部添加这些行。第一个将禁用 TypeScript 检查,第二个将禁用 ESLint 检查。

// @ts-nocheck
/* eslint-disable */

O
OZZIE

例如,您可以将其放在文件顶部:

/* eslint-disable no-console */

S
Sagar

您可以配置 eslint overrides 属性以关闭与 glob 模式匹配的文件的特定规则,如下所示。

在这里,我想关闭测试所有文件的 no-duplicate-string 规则。

overrides: [
  {
    files: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"],
    rules: {
      'sonarjs/no-duplicate-string': 'off'
    }
  }
]

正是在寻找这个!谢谢
J
Javi Marzán

截至今天,答案对我不起作用,但将其放在文件顶部确实有效:

/* eslint-disable @typescript-eslint/no-unused-vars */

重要的是要知道,至少在我的情况下,评论的类型会有所不同。以前的评论对我有用,但以下评论不起作用:

// eslint-disable @typescript-eslint/no-unused-vars

M
Mahesh

您可以使用 /*eslint [<rule: "off"], >]*/ 关闭文件的特定规则

/* eslint no-console: "off", no-mixed-operators: "off" */

版本:eslint@4.3.0


如果只需要为一个完整文件禁用一个规则,这非常有效。
N
Napster Scofield

只需在您的项目根目录中创建一个空文件 .eslintignore,输入您希望忽略它的文件的路径。

来源:https://eslint.org/docs/2.13.1/user-guide/configuring#:~:text=To%20disable%20rule%20warnings%20in,*%2F%20alert('foo')%3B

行忽略文件和目录


您将无法控制特定规则,也无法控制特定行。根据需要,我在 stackoverflow.com/a/56719951 的回答涵盖了更多案例。
S
Swapnil Shingare

要暂时禁用文件中的规则警告,请使用以下格式的块注释:

/* 禁用 eslint */

警报('foo');

/* eslint-enable */ 您还可以禁用或启用特定规则的警告:

/* eslint-disable no-alert, no-console */

警报('foo'); console.log('bar');

/* eslint-enable no-alert, no-console / 要在整个文件中禁用规则警告,请在文件顶部放置 / eslint-disable */ 块注释:

/* 禁用 eslint */

警报('foo');您还可以禁用或启用整个文件的特定规则:

/* eslint-disable no-alert */

警报('foo');要禁用特定行上的所有规则,请使用以下格式之一的行注释:

以下是为页面禁用 ESLint 的一些示例

警报('foo'); // eslint-disable-line

// eslint-disable-next-line alert('foo');要禁用特定行上的特定规则:

警报('foo'); // eslint-disable-line no-alert

// eslint-disable-next-line no-alert alert('foo');要禁用特定行上的多个规则:

警报('foo'); // eslint-disable-line no-alert, quotes, semi

// eslint-disable-next-line no-alert, quotes, semi alert('foo');

执行以下步骤从您的项目中禁用 ESLint

在您的项目中打开 package.config 文件。

删除所有与 ESLint 相关的依赖项。

从项目中删除 eslint.js/eslintconfig 文件

运行命令 npm install

现在运行你的项目


原始帖子询问如何为单个文件禁用它。不是整个项目。
您可以使用一个反引号(1 旁边的字符)来格式化一个跨度,或者使用三次反引号来格式化一个块。请参阅 stackoverflow.com/editing-help 花几分钟格式化您的答案可能更有帮助,也有更高的机会获得支持。 :)