能否不在命令行指定文件,仅通过ESLint配置文件执行代码检查?
问题描述
我的NPM脚本里存在重复的文件路径配置:
"lint": "eslint -c .eslintrc.json --fix src/**/*.ts test/**/*.ts *.ts", "lint:prod": "eslint -c .eslintrc.prod.json --fix src/**/*.ts test/**/*.ts *.ts",
同时lint-staged配置中也有类似的重复路径。我尝试不在命令行指定路径,让ESLint通过配置文件自动识别要检查的文件,配置如下:
"overrides": [ { "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint" ], "files": [ "src/**/*.ts", "test/**/*.ts", "*.ts" ] } ]
但运行npx eslint -c .eslintrc.json时没有文件被检查,只有在命令行添加路径才会执行检查。我猜测overrides[].files仅用于指定解析器作用的文件,而非ESLint本身要检查的文件。请问ESLint是否支持仅通过配置文件来指定要检查的文件?
解答
ESLint支持通过配置文件指定要检查的文件,但你用错了配置项——overrides[].files确实只是用来限定该段配置规则生效的文件范围,并非用来指定ESLint要扫描的目标文件。
要实现仅通过配置文件指定检查文件,你需要在ESLint配置的根层级使用**include**字段(ESLint v7及以上版本推荐),或者旧版本中的files根字段:
正确配置示例
使用include(推荐方案)
在.eslintrc.json的根层级添加该字段:
{ "include": [ "src/**/*.ts", "test/**/*.ts", "*.ts" ], "overrides": [ { "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint" ], "files": [ "src/**/*.ts", "test/**/*.ts", "*.ts" ] } ] }
旧版本ESLint(v7之前)
直接在根层级使用files字段:
{ "files": [ "src/**/*.ts", "test/**/*.ts", "*.ts" ], "overrides": [ // 你的覆盖规则配置 ] }
额外说明
- 配置生效后,运行
npx eslint -c .eslintrc.json就会自动扫描include/files指定的文件,无需在命令行重复输入路径。 - 如果同时在命令行指定了路径,命令行的路径优先级会高于配置文件中的
include/files。 - 针对lint-staged,你可以简化配置为
"*.ts": "eslint --fix",结合ESLint配置里的include,就能避免重复编写路径。
内容的提问来源于stack exchange,提问作者Josh M.
相关产品推荐
相关产品推荐

