【问题标题】:eslint / typescript: Unable to resolve path to moduleeslint / typescript:无法解析模块的路径
【发布时间】:2021-11-10 22:04:48
【问题描述】:

我的.eslintrc.json 是:

{
    "env": {
        "browser": true,
        "commonjs": true,
        "es6": true,
        "node": true,
        "jest": true
    },
    "parserOptions": {
        "ecmaFeatures": {
            "jsx": true
        },
        "sourceType": "module"
    },
    "plugins": [
        "react",
        "prettier",
        "import"
    ],
    "extends": [
        "airbnb",
        "airbnb/hooks",
        "plugin:@typescript-eslint/recommended",
        "plugin:react/recommended",
        "plugin:import/errors",
        "plugin:import/warnings",
        "plugin:import/typescript",
        "prettier"
    ],
    "root": true,
    "rules": {
        "no-const-assign": 1,
        "no-extra-semi": 0,
        "semi": 0,
        "no-fallthrough": 0,
        "no-empty": 0,
        "no-mixed-spaces-and-tabs": 0,
        "no-redeclare": 0,
        "no-this-before-super": 1,
        "no-unreachable": 1,
        "no-use-before-define": 0,
        "constructor-super": 1,
        "curly": 0,
        "eqeqeq": 0,
        "func-names": 0,
        "valid-typeof": 1,
        "import/extensions": 0,
        "react/jsx-filename-extension": 0,
        // note you must disable the base rule as it can report incorrect errors
        "no-shadow": 0,
        "@typescript-eslint/no-shadow": [
            1
        ],
        "no-unused-vars": 0,
        "@typescript-eslint/no-unused-vars": 1,
        "no-undef": 0,
        "jsx-a11y/click-events-have-key-events": 0,
        "jsx-a11y/no-static-element-interactions": 0,
        "@typescript-eslint/explicit-module-boundary-types": 0,
        "react/button-has-type": 0,
        "react/require-default-props": 0,
        "react/prop-types": 0,
        "react-hooks/exhaustive-deps": 0,
        "react/jsx-props-no-spreading": 0
    },
    "settings": {
        "import/resolver": {
            "node": {
                "extensions": [
                    ".js",
                    ".jsx",
                    ".ts",
                    ".tsx"
                ]
            }
        }
    }
}

在文件src/components/elements/ProtectedRoutes/InviteRoute.tsx 中,我有:

import routeNames from 'constants/routeNames';
import useRoles from 'hooks/roles';
import { ROLE } from 'shared/src/types/enums';

应用程序运行良好,但运行 lint 时出现错误:

  2:24  error  Unable to resolve path to module 'constants/routeNames'    import/no-unresolved
  3:22  error  Unable to resolve path to module 'hooks/roles'             import/no-unresolved
  5:22  error  Unable to resolve path to module 'shared/src/types/enums'  import/no-unresolved

我做错了什么?

【问题讨论】:

  • 您的意思是import routeNames from './constants/routeNames'; 而不是import routeNames from 'constants/routeNames';?我在 cmets 中询问,因为我不知道您的 constants/routeNames 模块应该来自这里

标签: javascript typescript eslint lint


【解决方案1】:

如果你想导入没有扩展名的 ts / tsx 文件,你应该将此配置传递给 eslint。 模块目录对于解析 ./src 中的路径很重要。如果在 src 中找不到模块,它将在 node_modules 中搜索

"settings": {
  "import/resolver": {
    "node": {
      "extensions": [".ts", ".tsx"],
      "moduleDirectory": ["src", "node_modules"]
    }
  }
}

【讨论】:

    【解决方案2】:

    看起来您已经在 TypeScript 配置中定义了自定义 paths(通常是 tsconfig.json)。 import 插件不知道 TypeScript 配置的正确位置,因此无法解析这些路径。您需要做的是通过resolver options 中的project 参数指定TypeScript 配置的正确路径:

    {
        ...
        "settings": {
            "import/resolver": {
                "project": "./my-path-to/tsconfig.json",
                ...
            }
        }
    }
    

    或者,如果您的 tsconfig.json 位于存储库的根目录中,请设置:"project": {},请参阅此 GitHub 问题:https://github.com/import-js/eslint-plugin-import/issues/1485

    【讨论】:

      【解决方案3】:

      如果您在 VSCode 中的 monorepo 中收到此错误,可能是因为 ESLint 在不正确的文件夹中查找 tsconfig 文件,您应该添加带有一些配置的 .vscode/settings.json。

      例如,如果您有一个位于工作区/服务器的项目:

      {
        "eslint.workingDirectories": [
          { "directory": "workspaces/server", "changeProcessCWD": true },
        ]
      }
      

      告诉 eslint 所有不同的子项目文件夹

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 2020-05-06
        • 2022-12-19
        • 2021-03-29
        • 2021-12-13
        • 2020-06-07
        • 2021-06-05
        • 1970-01-01
        • 2023-01-24
        相关资源
        最近更新 更多