TypeScript项目配置baseUrl与ESLint后,无法限制导入路径且出现模块查找错误
TypeScript项目配置baseUrl与ESLint后,无法限制导入路径且出现模块查找错误
看起来你遇到了两个关联的问题——TypeScript无法解析基于baseUrl的导入路径,同时ESLint的导入限制规则也没生效。我来一步步帮你解决这两个问题:
一、解决TS2307模块查找错误
你的tsconfig配置本身是正确的(baseUrl设为src、include包含src),但ESLint和TypeScript的路径解析需要同步,而且你需要确保ESLint能识别TypeScript的路径别名。你已经安装了eslint-plugin-import,现在需要补充一个依赖让ESLint读取tsconfig的路径配置:
- 先安装依赖:
yarn add -D eslint-import-resolver-typescript
- 在你的
eslintrc.cjs的settings中添加导入解析器配置:
settings: { "react": { "version": "detect" }, "import/resolver": { "typescript": { "project": "./tsconfig.json" // 指定你的tsconfig文件路径 } } },
配置完成后,ESLint就能和TypeScript一样解析基于baseUrl的导入了。另外可以尝试重启编辑器,避免缓存导致的识别问题。
二、让ESLint的导入限制规则生效
你当前使用的no-restricted-imports规则禁止../*模式,但可能因为路径别名的存在,相对路径被转换为绝对别名路径,导致规则未触发。更适合的方案是使用专门的规则来禁止上级目录的相对导入:
- 在
eslintrc.cjs的rules中添加:
"import/no-relative-parent-imports": "error",
这个规则会直接禁止所有向上级目录的相对导入,比no-restricted-imports更精准简洁。
如果坚持使用no-restricted-imports,可以扩展匹配模式覆盖多级上级路径:
"no-restricted-imports": ["error", { "patterns": ["../*", "../../*", "../../../*"] }],
三、额外检查点
- 确认
tsconfig.json没有被ESLint忽略,你的ignorePatterns中未包含该文件,这部分配置是正确的; - 你已安装
vite-tsconfig-paths,能保证Vite构建时正确解析路径,无需额外调整; - 运行ESLint时,确保目标路径是
src目录,比如执行eslint src/**/*.{ts,tsx},避免路径范围错误导致规则未执行。
调整完配置后,重启ESLint服务或编辑器,应该就能同时解决模块查找错误和导入限制失效的问题了。
备注:内容来源于stack exchange,提问作者Web Obsseser
相关产品推荐
相关产品推荐

