【问题标题】:Why is @typescript-eslint/parser including files outside of those configured in my tsconfig.json?为什么@typescript-eslint/parser 包含在我的 tsconfig.json 中配置的文件之外的文件?
【发布时间】:2020-09-09 09:13:58
【问题描述】:

我收到错误:-

Parsing error: "parserOptions.project" has been set for u/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.

IDE - WebStorm 20.1.1

项目结构:-

node_modules

src

--- testfile.js

.eslintrc.js

.prettierrc.js

baseeslint.js

package.json

tsconfig.json

.eslintrc.js: -

module.exports = {
extends: ['./baseeslint'],
parserOptions: {
project: './tsconfig.json'
},
rules: {}
}

baseeslint.js:-

module.exports = {

parser: '@typescript-eslint/parser'

}

tsconfig.json: -

{

"include": [

"/src/**/*.ts",

"/src/**/*.tsx"

],

"exclude": ["node_modules"],

"compilerOptions": {

"outDir": "./lib",

"types": ["styled-components", "react", "@types/react-router-dom", "reactstrap"]

}

}

我完全不知道为什么会这样?我会假设它会忽略根目录中的文件,尤其是在我的 tsconfg.json 中指定的包含?

任何帮助将不胜感激。

编辑:-

我的解决方案,对别人有帮助吗...

我将 ignorePatterns 配置添加到我的 .eslintrc.js 文件中:-

module.exports = {
  extends: ["mycustom/eslint-config"],
  parserOptions: {
    project: './tsconfig.json'
  },
  ignorePatterns: ["/*.*"],
  rules: {}
}

这也可以通过 .eslintignore 来完成(请参阅下面的 Anton Bessonov 的回复)。

与此相关的另一件事可能对其他人有用的是我使用的 VScode 配置(我在发布原始问题后从 WebStorm 切换到 VSCode)。我非常喜欢在保存时运行 eslint fix,但我不希望它尝试对所有文件执行此操作。我的项目文件(并且只有我的项目文件)都是 .ts/.tsx。 settings.json 中的以下选项允许修复保存而不包括我的 repo 中的每个文件:-

{
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    },
    "eslint.probe": [
        "typescript",
        "typescriptreact"
    ],
}

如果没有指定eslint.probe,则默认为:-

["javascript", "javascriptreact", "typescript", "typescriptreact", "html", "vue"]

有关 VSCode ESLint 扩展设置的更多信息,请参阅here

【问题讨论】:

标签: typescript visual-studio-code eslint vscode-settings


【解决方案1】:

为什么会这样?

我不完全确定,但似乎@typescript-eslint/parser 试图将 eslint 配置中涵盖的文件(例如通过扩展名)与tsconfig.json 中包含的文件进行比较。由于.js 文件被@typescript-eslint/parser 覆盖,并且根据您的eslint 配置,该文件可能包含在eslint 运行中。但是由于该文件未包含在 tsconfig 中,因此您会收到此错误。

如何解决?

根据您的情况,您可以选择其中之一:

  1. 您可以在.eslintignore 中忽略它。这就是@U4EA 所做的。
  2. 如果可以将其添加到 tsconfig.json 中的包含中:
    "include": [
        ".eslintrc.js",
        // another includes
    ]
  1. 如果您没有“正确”的 tsconfig.json,因为您使用的是 monorepo,那么您可以创建一个新文件 tsconfig.eslint.json
{
    "include": [
        ".eslintrc.js"
    ]
}

并将此文件仅用于 eslint:

    parserOptions: {
        project: [
            './tsconfig.eslint.json',
            './packages/*/tsconfig.json',
        ],
    },

【讨论】:

  • 谢谢,这真的很简单而且很有帮助。
【解决方案2】:

您也可以忽略 .eslintrc.js 本身中的 .eslintrc.js,为您节省一个额外的文件:

"ignorePatterns": [
    ".eslintrc.js"
],

【讨论】:

    【解决方案3】:

    对 VS Code 用户很有帮助,卸载或禁用 ESLint 扩展可能会解决这个问题,它对我有用 :)

    【讨论】:

      【解决方案4】:

      添加.eslintignore解决

      /*.*
      

      编辑:

      我的最终解决方案是将ignorePatterns 配置添加到我的 .eslintrc.js 文件中:-

      module.exports = {
        extends: ["mycustom/eslint-config"],
        parserOptions: {
          project: './tsconfig.json'
        },
        ignorePatterns: ["/*.*"],
        rules: {}
      }
      

      这样做的原因是为了摆脱 .eslintignore 文件(减少工作空间的混乱)。

      【讨论】:

        【解决方案5】:

        Extension

        我遇到了类似的问题,我在 vs 代码上禁用了 eslint 扩展,这就是我的问题。我假设全局 eslint 和我的项目之间存在某种冲突。

        【讨论】:

          【解决方案6】:

          只是为了建立 the accepted answer,我发现对我有帮助的是,默认情况下隐藏文件 aren't captured by globs

          要解决这个问题,你可以做一些组合(取决于你的shell environment supports):

          "include": [
              "./**/*", // All non-hidden files at any directory level
              "./**/.*", // Hidden dotfiles like .eslintrc.js at any level
              "./**/.*.[tj]s?(x)" // All hidden TS/JS dotfiles
          ]
          

          【讨论】:

            猜你喜欢
            • 2022-06-25
            • 2020-06-05
            • 2021-01-24
            • 2017-07-04
            • 2021-10-13
            • 2020-02-13
            • 1970-01-01
            • 1970-01-01
            • 2021-07-27
            相关资源
            最近更新 更多