已为@ typescript-eslint / parser设置“ parserOptions.project”

时间:2019-10-22 18:24:46

标签: typescript react-native eslint typescript-eslint

我使用--template typescript

创建了一个新的React Native项目

我删除了template目录,该目录是样板文件的一部分。

然后我继续添加ESLint:

module.exports = {
  parser: "@typescript-eslint/parser",
  plugins: ["@typescript-eslint"],
  extends: ["airbnb-typescript-prettier"]
};

但是,当我打开babel.config.js时,出现此错误

  

解析错误:已为@ typescript-eslint / parser设置了“ parserOptions.project”。   该文件与您的项目配置不匹配:/Users/Dan/site/babel.config.js。   该文件必须包含在至少一个提供的项目中。eslint

14 个答案:

答案 0 :(得分:31)

您可以创建用于tsconfig.eslint.json配置的单独的TypeScript配置文件(eslint)。该文件扩展了tsconfig的配置,并为必须删除的文件设置了include键。

.eslint.js

// ...
parserOptions: {
  // ...
  project: "./tsconfig.eslint.json",
  // ...
},
// ...

tsconfig.eslint.json

{
  "extends": "./tsconfig.json",
  "include": [
    // ...
    "babel.config.js"
  ]
}

或者,如果您想忽略它,可以将其放入.eslintignore

.eslintignore

// ...
babel.config.js

答案 1 :(得分:12)

按照建议的in this issue,您可以将createDefaultProgram: true添加到解析器选项中作为临时解决方案,尽管这样做的代价是可能会使您的IDE变得更慢。

{
  ...
  parserOptions: {
    project: './tsconfig.json',
    createDefaultProgram: true,
  },
}

答案 2 :(得分:10)

在“.eslintignore”中添加一行:

.eslintrc.js

答案 3 :(得分:5)

在我的ESLint配置中,我具有以下配置:

.eslintrc.js

module.exports = {
  root: true,
  env: {
    node: true,
  },
  globals: {
    Promise: "readonly"
  },
  parser: "@typescript-eslint/parser",
  parserOptions: {
    sourceType: "module",
    tsconfigRootDir: __dirname,
    project: ["./tsconfig.eslint.json"],
  },
  plugins: ["@typescript-eslint"],
  extends: [
    "eslint:recommended",
    "prettier/@typescript-eslint",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking",
  ],
}

更新 该修复程序的关键部分是:

parser: "@typescript-eslint/parser"

这:

parserOptions: {
    sourceType: "module",
    tsconfigRootDir: __dirname,
    project: ["./tsconfig.eslint.json"], // could be tsconfig.json too
}

答案 4 :(得分:5)

发生此问题的原因如下:

  1. 您使用的规则需要类型信息,但未指定 一个parserOptions.project;
  2. 您指定了parserOptions.project,未指定createDefaultProgramit will be removed in a future version),并且正在删除项目中未包含的文件(例如babel.config.js,{{1 }})

TypeScript ESLint Parser docs起:

parserOptions.project

此选项使您可以提供项目metro.config.js的路径。如果要使用需要类型信息的规则,则需要此设置。

(...)

请注意,如果指定了此设置而未指定tsconfig.json,则必须仅对包含在项目中的文件进行清理,这些文件由提供的createDefaultProgram文件定义。如果您现有的配置未包含您要删除的所有文件,则可以创建单独的tsconfig.json

要解决此问题,请将您的ESLint配置更新为以下内容:

tsconfig.eslint.json

答案 5 :(得分:2)

通过将 eslint 选项添加到您的 ignorePatterns 中,简单地指示 .eslintrc.js 忽略它们:

module.exports = {
  root: true,
  parser: '@typescript-eslint/parser',
  parserOptions: {
    project: './tsconfig.json',
  },
  ignorePatterns: ["babel.config.js"],
  ...

由于对项目配置文件进行 linting 没有太大价值,因此您可以放心地忽略它们。

此外,我不会将它们作为您的 tsconfig.json 的一部分或创建特殊的 tsconfig.eslint.json 文件,仅用于 linting 目的。

答案 6 :(得分:1)

您需要将该文件添加到tsconfig include阵列中。 有关更多详细信息,请参见typescript-eslint/typescript-eslint#967

答案 7 :(得分:1)

我使用从项目文件夹指向主文件夹的符号链接:

/opt/project/workspace => ~/worspace

使用符号链接路径~/workspace打开VSCode,错误始终存在。

使用原始路径/opt/project/workspace打开VSCode可解决此问题。

这应该不是问题,但现在是。

答案 8 :(得分:1)

对我来说,问题源于使用 tsconfig 属性在 exlucde 中忽略的某些文件,但 eslint 没有忽略它们。

通常,如果希望 TSC 忽略文件,那么同样将应用于 eslint。所以只需将 exclude 配置中 .tsconfig 的值复制粘贴到 ignorePatterns 配置中的 .eslintrc 属性中。

答案 9 :(得分:0)

在我们的例子中,目录树中有多个.eslintrc和多个tsconfig.json。 (在.上每个用于服务器,在./client上每个用于React客户端。)

这在CLI上可以正常工作,但在VS Code的插件上不能正常工作。

解决方法是将./client/.eslintrc project值设置为相对于 root 的值-而不是相对于.eslintrc文件。将其从“ ./tsconfig.json”更改为“ ./client/tsconfig.json”后,IDE衬棉将按预期工作。

答案 10 :(得分:0)

当我在文件夹结构中打开我的项目时,在VsCode中遇到了这个问题。奇怪的解决方案,但是有效。

在我的示例中,.ts中用于Express的Firestore功能项目,我不得不从其创建的functions文件夹中打开它。

我应该注意到这是这种问题,因为'npm run-script lint'从未返回错误。

答案 11 :(得分:0)

我在将 '@typescript-eslint/prefer-nullish-coalescing': 'error' 添加到 .eslintrc.js 时遇到了同样的问题。

经过多次反复试验,我想出了这个解决方案,在我的情况下效果很好:

module.exports = {
  ...
  overrides: [
    {
      files: ['*.ts', '*.tsx'],
      parserOptions: {
        // this setting is required to use rules that require type information
        project: './tsconfig.json',
      },
      rules: {
        '@typescript-eslint/prefer-nullish-coalescing': 'error',
      },
    },
  ],
}

答案 12 :(得分:-1)

您需要包括对*.config.js文件的打字稿支持:

tsconfig.json

{
  "include": [
    "**/*.config.js" // for *.config.js files
  ]
}

然后重新加载您的IDE!

答案 13 :(得分:-1)

您只需忽略 babel.config.js 文件中的 .eslintignore