Eslint/Tslint 配置帮助(不包括文件)

Posted

技术标签:

【中文标题】Eslint/Tslint 配置帮助(不包括文件)【英文标题】:Eslint/Tslint Config help (excluding files) 【发布时间】:2020-07-04 10:20:36 【问题描述】:

最近在我们的项目中我们迁移到使用@typescript-eslint/parser 来慢慢从 tslint 迁移。一切都很顺利,但我有一个小问题/问题我无法解决。

我是否需要在 tsconfig 排除数组以及 .eslintrc 导出对象上的 ignorePatterns 中指定忽略文件/模式?有什么区别?

我们的src/lang 目录中有一个messages.js 文件,我试图忽略它,但目前在我们的预提交挂钩上抛出了一个lint 错误,这让我想知道这个问题以及这两个设置如何协同工作.

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

我认为我对这些交织的理解是错误的,因为当 eslint 运行时,我认为 parserOptions 会从 tsconfig 中获取项目规则,其中排除了 js 文件。

目前,我在我们的 eslintrc 中谈论的部分看起来像:

module.exports = 
    parser: '@typescript-eslint/parser',
    parserOptions: 
        project: path.resolve(__dirname, './tsconfig.json'),
        tsconfigRootDir: __dirname,
        useJSXTextNode: true,
        sourceType: 'module',
        ecmaFeatures: 
            modules: true,
            jsx: true,
        ,
    ,
    ignorePatterns: ['node_modules/**', '.storybook/**', 'src/stories/**', '*.scss', '*.js'] // ignoring here works

tsconfig

"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules", "src/**/*.js"], // exclude here doesn't work.

package.json:

"scripts": 
    "lint": "tsc --project ./tsconfig.json --noEmit && eslint --ext=jsx,ts,tsx src"
,

【问题讨论】:

你可能已经解决了这个问题,但我发布了一个答案,以防它帮助你,也帮助其他找到这个问题的人。 【参考方案1】:

ESLint 向@typescript-eslint/parser 插件传递一个文件列表(ESLint 从命令行获取)。 @typescript-eslint/parser 插件无法控制此列表,因此它会尽力根据给出的列表进行操作。

错误消息试图通知用户 ESlint 正在检查一个被 @typescript-eslint/parser 插件排除在解析之外的文件。从插件的角度来看,这可能有两个原因:

    该文件被有意、明确​​地排除(通过将其添加到 tconfig exclude)。 用户忘记将文件添加到 tsconfig include

在后一种情况下(更常见),插件想要通知用户他们的配置错误,以便他们可以更正它。因此,您看到了错误消息。

为了从 TSLint 中正确排除文件,一种选择是使用 .eslintignore 文件。 您还可以更改 eslint 命令以忽略排除的文件:

eslint ... --ignore-pattern "src/**/*.js"

(但请注意,忽略模式是相对于 当前目录,而不是相对于 tsconfig 等的位置。)

或者,如果您确实希望 ESLint 对文件进行 lint(但仍将它们排除在 tsconfig 中),您可以考虑通过创建一个 tsconfig.eslint.json 文件来为 @typescript-eslint/parser 提供更具包容性的 tsconfig extends from your normal tsconfig。

另请参阅这些 GitHub 问题:

@typescript-eslint/parser doesn't ignore files, which is excluded by/in tsconfig.json #905 parse error on excluded files #1174 Exclude files in tsconfig without throwing an @typescript-eslint/parser error #1350

【讨论】:

【参考方案2】:

通过使用 JS 配置文件 .eslintrc.js 并执行以下操作,我能够使用 tsconfig 排除:

const tsConfig = require('./tsconfig.eslint.json');

module.exports = 
  ...
  ignorePatterns: tsConfig.exclude,
;

【讨论】:

以上是关于Eslint/Tslint 配置帮助(不包括文件)的主要内容,如果未能解决你的问题,请参考以下文章

为 TSLint (NestJs) 和 ESLint (VueJs) 设置 VS Code linting

防止 Prettier(代码格式化程序)和 ESLint/TSLint 之间的冲突

签名(调试)不包括 beta-reports-active 权利

有没有办法改善 Visual Studio Code 中突出显示的 linting 错误?

临时配置文件的 Xcode 错误“配置文件不包括 beta-reports-active 权利”

求帮助,配置PyInstaller不成功