eslint 找不到根目录 tsconfig.json 是因 vscode 插件默认以文件所在目录为工作区根且不向上递归查找,需同时配置 eslint.config.js 中 parseroptions.project 为绝对路径或正确相对路径,并在 .vscode/settings.json 中设置 eslint.workingdirectories 指向项目根及子目录。

ESLint 找不到根目录 tsconfig.json 的原因
VSCode 的 ESLint 插件默认以当前打开的文件所在目录为工作区根,而不是你项目真正的根(比如 packages/my-app 下的文件,ESLint 就会去 packages/my-app/ 里找 tsconfig.json,而不是项目顶层)。它不会自动向上递归查找,也不读取 eslint.config.js 里的 parserOptions.project 路径之外的配置。
parserOptions.project 必须写绝对路径或基于工作区的相对路径
在 eslint.config.js(或旧版 .eslintrc.cjs)中,parserOptions.project 如果写成 "./tsconfig.json",ESLint 会相对于当前被检查的文件解析,不是相对于配置文件本身——这极易出错。正确做法是:
- 用 Node.js 的
__dirname拼出绝对路径:path.join(__dirname, '../tsconfig.json') - 或明确写成工作区根路径的相对形式:
path.join(__dirname, '../../tsconfig.json')(需按你实际目录层级调整) - 确保该路径下真实存在
tsconfig.json,且不是软链接或 IDE 自动生成的临时文件 - 如果项目用了
projectReferences,还要确认引用的子项目tsconfig.json已启用"composite": true
VSCode 需要显式设置 eslint.workingDirectories
仅靠 ESLint 配置还不够。VSCode 插件需要知道“哪些子目录应共用同一套根配置”。否则它仍会在子目录内启动独立的 ESLint 进程,导致 parserOptions.project 失效。
- 在工作区
.vscode/settings.json中添加:"eslint.workingDirectories": [ ".", "packages/*", "apps/*" ]
-
"."表示项目根;"packages/*"告诉插件:所有packages/xxx下的文件,都应把根目录当作工作目录来加载 ESLint 和tsconfig.json - 避免写
"packages/**"—— VSCode 不支持 glob 递归,只认一层通配 - 改完后必须重启 ESLint 服务器:命令面板执行
ESLint: Restart ESLint Server
常见报错与验证方式
典型错误信息如:Cannot find module 'typescript'、Failed to load parser '@typescript-eslint/parser' 或更隐蔽的 TS2307: Cannot find module 'xxx',往往不是类型问题,而是 ESLint 根本没读到 tsconfig.json 导致类型检查未启用。
- 在任意子目录 TS 文件中,删掉一个合法 import,看 ESLint 是否报
import/no-unresolved—— 如果不报,说明类型感知没开 - 打开 VSCode 输出面板 → 切换到
ESLint标签,搜索Using tsconfig.json,确认打印的路径是你期望的根目录下的那个 - 检查
node_modules/.bin/eslint是否能从子目录正常执行(排除本地安装缺失)
最易忽略的是:VSCode 设置里的 eslint.workingDirectories 和 ESLint 配置里的 parserOptions.project 必须协同生效,缺一不可。单独改哪一边都可能看起来“好了”,实则类型检查仍是残缺的。











