eslint-plugin-import无法区分外部与内部目录的配置问题
问题
我在.eslintrc中配置了如下import/order规则:
"import/order": [ "error", { "alphabetize": { "caseInsensitive": true, "order": "asc" }, "groups": [ "builtin", "external", "internal", "parent", "sibling", "index" ], "newlines-between": "always-and-inside-groups", "pathGroups": [ { "pattern": "react", "group": "external", "position": "before" } ], "pathGroupsExcludedImportTypes": ["builtin"] } ],
以及解析器配置:
"settings": { "import/resolver": { "typescript": { "alwaysTryTypes": true, "project": "./tsconfig.json" }, "node": { "paths": "src" } } }
但在某文件中,我先导入第三方依赖:
import { useReactToPrint } from "react-to-print"
之后导入本地Apollo生成的模块:
import { ReservationStatus } from "generated/graphql"
此时ESLint报错,要求react-to-print的导入放在generated/graphql之后,这明显不符合预期,请问我的配置哪里出了问题?
原因与修复
问题核心是ESLint误将generated/graphql识别为外部模块,和react-to-print归为同一组后,按照字母排序规则(generated在字母顺序上早于react),触发了排序报错。导致误判的原因是你配置了node.paths: "src",若generated目录不在src下,ESLint会把它当成外部包;若在src下,也可能因解析逻辑问题被归为外部组。
提供两种可行的修复方案:
- 方案一:明确将generated模块归为internal组
在import/order的pathGroups中添加规则,强制generated/**匹配到internal组,确保它在外部模块之后导入:
"pathGroups": [ { "pattern": "react", "group": "external", "position": "before" }, { "pattern": "generated/**", "group": "internal", "position": "after" } ],
- 方案二:调整node resolver的paths配置
如果generated目录不在src路径下,可移除node.paths: "src"(若不需要通过绝对路径导入src内的模块),或者把generated所在目录也加入paths,让ESLint正确识别它为内部模块:
"node": { "paths": ["src", "generated"] }
注意:如果generated是在src目录下生成的,需检查tsconfig.json的paths配置是否同步,确保ESLint和TypeScript的解析逻辑一致。
内容的提问来源于stack exchange,提问作者Red Baron
相关产品推荐
相关产品推荐

