如何修复 eslintrc 文件不匹配您的项目配置?

在我的打印脚本项目中,我使用的是 eslint。下面的文件在根目录中,我还有子文件夹 /dist/src

Eslintrc.js

module.exports = {
root: true,
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
rules: {
strict: 'error',
semi: ['error', 'always'],
'no-cond-assign': ['error', 'always'],
},
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
],
}

Tsconfig.json

{
"compilerOptions": {
"outDir": "dist",
"noImplicitAny": true,
"moduleResolution": "Node",
"resolveJsonModule": true,
"module": "ES2020",
"target": "ES2020",
"lib": ["ES2020"],
"allowJs": false,
"alwaysStrict": true
},
"include": ["src"]
}

顶部的单词 module有一条带有此错误的红线

Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: .eslintrc.js.
The file must be included in at least one of the projects provided. eslint

我该怎么补救?

56527 次浏览

同样的错误,这对我很有效: Https://github.com/nestjs/nest/issues/4900#issuecomment-669743374 Https://github.com/nestjs/nest/issues/4900#issuecomment-707330674

看起来配置文件必须被命名。并使用 json 格式代替。Js 和 parserOptions.createDefaultProgram 必须设置为 true

更新你的 eslintrc.js包括:

IgnorePattern: [’. eslintrc.js’]

这个错误是关于什么的?

恼人的错误基本上是说文件 eslintrc.js 本身既是:

  1. 被 ESLint 找到了,但是
  2. 不符合它应该打印的文件列表

所以,ESLint 不知道该怎么办,吓坏了!

请注意,虽然这个文件不包含您的代码,但是您应该决定是否要链接这个文件(例如,选项卡与空格,或双引号与单引号)。


应该怎么做?

您可以从上面的冲突情况中省略(1)或(2)。

解决方案1: 告诉 ESLint 忽略该文件

只需将文件名(例如 .eslintrc.js)添加到 .eslintignore

您还可以看到 案例1.3我的答案,在这里的不同方式可以做到这一点。

  • 优点: 快,简单,无痛。
  • 缺点: 此文件 可以的格式与其他文件在制表符/空格或引号样式方面不一致。

解决方案2: 告诉 ESLint 对这个文件进行初始化(首选)

Type-ESLint 获取从 tsconfig.json通过 parserOptions > project包含的文件列表。

因此,您可以将该文件添加到现有的 tsconfig.json(解决方案2.1) ,或者创建一个辅助 tsconfig.eslint.json来包含这样的文件,您希望通过类型脚本-eslint 对这些文件进行连接,但不一定要由类型脚本编译器处理。

  • 优点: 这个文件和其他类似的.js 配置也将包含在内,以保持所有内容的一致性。
  • 缺点: 您可能不希望将这些配置文件链接起来。

解决方案2.1: 将其添加到现有的 tsconfig.json

// in tsconfig.json ...


"include": [
".eslintrc.js",
// ...
]

解决方案2.2: 将其添加到一个单独的 tsconfig.eslint.json文件中 创建包含以下内容的文件名 tsconfig.eslint.json:

// new file: tsconfig.eslint.json


{
"include": [
".eslintrc.js"
]
}

然后将其注入到 eslintrc.jsparserOptions > project(是的,project同时接受字符串和字符串数组) :

// in eslintrc.js ...


parserOptions: {
project: [
resolve(__dirname, './tsconfig.json'),
resolve(__dirname, './tsconfig.eslint.json'),
],
}

这个答案是非常相似的,我将给予一些信任。

这现在在 我得到错误告诉我“该文件必须包含在至少一个项目提供”中 TypeScript ESLint 的文档中有文档说明

TLDR: 请参阅下面的“附加选项”,以获得我认为的最佳解决方案。

下面是相关的文档和附加的注释。这是建立在 上一个答案的基础上的。

这个错误意味着被链接的文件没有包含在您提供给我们的任何 tsconfig 文件中。很多时候,当用户拥有测试文件或类似的文件,而这些文件并不包含在他们的正常 tsconfigs 中时,就会发生这种情况。

取决于你想达到的目标:

  • 如果 不要想要对文件进行线性处理:
  • 如果 想要对文件进行线性处理:
    • 如果 不要希望使用类型感知的 linting 对文件进行 linting:
      • 使用 ESLint 的 overrides配置将文件配置为不使用类型信息进行分析。
        • 一种流行的安装方式是从顶级配置中省略上述添加,仅通过覆盖将它们应用于 TypeScript 文件。= > 请参阅下面的附加选项
        • 或者,可以将 parserOptions: { project: null }添加到要排除的文件的覆盖中。请注意,{ project: undefined }将不工作。= > 请参阅下面的减法选项
    • 如果 希望使用类型感知的 linting 对文件进行 linting:
      • 检查您提供给 parserOptions.project的每个 tsconfigs 的 include 选项-您必须确保所有的文件都匹配 include通配符,否则我们的工具将无法找到它。参见此答案的解决方案2.1
      • 如果你的文件不应该是你现有的 tsconfig 的一部分(例如,它是一个脚本/工具本地的回购) ,然后考虑创建一个新的 tsconfig (我们建议称之为 tsconfig.eslint.json)在您的项目根目录中列出这个文件在其包括。例如,您可以查看我们在这个回购中使用的配置: < strong > = > 请参阅 < a href = “ https://stackoverflow. com/a/68686975/1030527”> 这个答案的解决方案2.2或下面的例子

附加选项

在这个解决方案中,TypeScript 源文件只有 (即启用) parser: '@typescript-eslint/parser'选项(和其他相关选项)。像 eslintrc.js这样的其他文件不会受到该配置的影响,但是仍然会根据其余的配置进行链接。

把这个加到 eslintrc.js

overrides: [
{
files: ['src/**/*.ts'],
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
rules: {},
},
],

上述配置仅对 src目录中的文件使用 TypeScriptESLint。

请注意,所有 TypeScript ESLint 规则也需要在 overrides条目中(即不是根 rules选项) ,否则您将得到如下错误消息:

Error: Error while loading rule '@typescript-eslint/dot-notation': You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.

减法选项

有了这个解决方案,就可以使用 拿开 eslintrc.js(或 eslint.cjs)配置文件的 parser: '@typescript-eslint/parser'选项。

把这个加到 eslintrc.js

overrides: [
{
files: ['./.eslintrc.js'],
parserOptions: { project: null },
rules: {},
},
],

上述配置禁用 eslintrc.js文件的 TypeScriptESLint。还可以在 override.files中添加其他文件或文件夹以扩展此行为。

缺点: 所有 TypeScript ESLint 规则也需要在 overrides条目中删除,否则你会得到如下错误消息:

Error: Error while loading rule '@typescript-eslint/dot-notation': You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.

如果 Jest 能够提供一种配置 .yaml文件的方法,就可以避免这个问题的一部分。Cypress 在他们的目录中添加了他们自己的 tsconfig.json来覆盖他们的测试文件,但是他们的配置文件也有类似的问题。

如果你想要一个极简的 tsconfig.jest.json,它可以看起来像这样(不需要添加其他选项) :

{
"include": ["jest.config.js", "tests/*.ts"]
}

这个扩展名应答中,可以在 tsconfig.eslint.json文件中使用以下配置

{
"include": [
"./**/.eslintrc.js"
]
}

上述规则是更一般的,并将确保也包括 .eslintrc.js文件目前在您的项目的其他文件夹(旁注: 您可以添加 .eslintrc.js在任何文件夹级别内的根项目。这将允许您覆盖该项目级别的某些规则的行为)。