You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:32:30