eslint 默认不限制检查范围,需通过配置实现:在项目根目录建 .eslintignore 排除非 src 目录,或在 eslint.config.js 的 ignores 字段明确过滤,并在 vscode 中启用 eslint.experimental.useflatconfig 及配置 eslint.workingdirectories 指向 src。

ESLint 默认会扫描整个工作区,怎么限制只检查 src?
VSCode 的 ESLint 插件本身不控制“扫描哪些目录”,它只是调用你本地的 eslint CLI。真正决定检查范围的是 ESLint 自己的配置逻辑:它从被打开的文件路径向上找配置,再根据配置里的 files、ignores 和 .eslintignore 做过滤。所以关键不是改 VSCode 设置,而是让 ESLint 进程只“看到” src 下的文件。
.eslintignore 文件必须存在且路径正确
ESLint 会从当前工作区根目录读取 .eslintignore,且该文件始终以项目根为基准——哪怕你在 src/ 里打开文件,它也不会自动切到 src/ 下去找 ignore 规则。
- 在项目根目录(即
package.json所在处)创建.eslintignore - 内容只需写明要跳过的路径,例如:
node_modules/ dist/ build/ public/ *.config.js
- 注意:
src/不需要写进 ignore —— 它是默认被包含的;你只需排除不想检查的目录 - 如果用了
eslint.config.js(扁平化配置),.eslintignore依然生效,但某些旧版插件可能忽略它,此时优先用配置里的ignores字段
用 eslint.config.js 的 ignores 字段更可靠
如果你用的是 ESLint v8.50+ 的新格式(eslint.config.js),推荐直接在配置中声明忽略规则,比 .eslintignore 更明确、不易被路径干扰。
- 确保
eslint.experimental.useFlatConfig: true已在 VSCode 设置中开启 -
eslint.config.js必须导出数组,其中一项可专门写ignores:
export default [
{
ignores: [
"node_modules/**",
"dist/**",
"build/**",
"public/**",
"**/*.config.js"
]
},
{
files: ["src/**/*.js", "src/**/*.ts"],
rules: { /* your rules */ }
}
];
这样 ESLint 启动时会先过滤掉这些路径,后续 files 模式才只匹配 src 内的文件。
VSCode 设置里别漏掉 eslint.workingDirectories
多根工作区或子包结构下,VSCode 可能误判 ESLint 应该从哪启动。比如你打开了一个 monorepo 根目录,但想只对 packages/my-app 里的 src 生效,就得显式指定工作目录。
- 在项目根目录的
.vscode/settings.json中加:
{
"eslint.workingDirectories": ["./packages/my-app", "./src"]
}
或者更保守地写成相对路径:
"eslint.workingDirectories": [{ "mode": "auto" }]
这个设置会让插件为每个匹配的子目录单独启动一个 ESLint 进程,避免跨目录误检。
最常被忽略的一点是:VSCode 并不主动“限制检查目录”,它只是把文件丢给 ESLint;所有过滤逻辑都在 ESLint 配置层。一旦 .eslintignore 缺失、ignores 字段拼错、或 workingDirectories 指向错误,你就可能看到 dist/main.js 被标红——那不是 VSCode 的问题,是 ESLint 正在忠实地检查它“以为该看”的每一个文件。











