typescript와 함께 eslint 사용-모듈 경로를 확인할 수 없음


124

내 파일 app.spec.ts 에이 가져 오기가 있습니다 .

import app from './app';

이 Typescript 오류의 원인

2:17  error  Unable to resolve path to module './app'  import/no-unresolved

./app.ts 가 존재하지만 .ts 파일을 .js 파일로 컴파일하지 않았습니다. .ts 파일을 .js로 컴파일하자마자 오류가 사라집니다.

그러나 eslint는 typescript와 함께 작동해야하므로 .js가 아닌 .ts로 모듈을 확인해야합니다.

또한 eslint구성 파일 에 typescript 정보를 추가했습니다 .

"parser": "@typescript-eslint/parser",
"parserOptions": {
    "project": "./tsconfig.json"
}

.js가 아닌 .ts로 모듈을 해결하려고 시도하는 방식으로 eslint를 구성하려면 어떻게해야합니까?

건배!

# 1 수정

내용 app.ts:

import bodyParser from 'body-parser';
import express from 'express';
import graphqlHTTP from 'express-graphql';
import { buildSchema } from 'graphql';

const app = express();

const schema = buildSchema(`
    type Query {
        hello: String
    }
`);
const root = { hello: () => 'Hello world!' };

app.use(bodyParser());
app.use('/graphql', graphqlHTTP({
    schema,
    rootValue: root,
    graphiql: true,
}));

export default app;

1
추가 했습니까 "plugins": ["@typescript-eslint"]? 문서는 github.com/typescript-eslint/typescript-eslint/tree/master/...
스모 네이트

1
안녕하세요 @Jasmonate, 답변 주셔서 감사합니다! 그래서 방금이 구성을 추가했고 이제 Typescript 특정 linting을 수행 할 수 있지만 문제가 해결되지 않습니다. 나는 아직도 얻는다Unable to resolve path to module './app'
maximedupre

이것을 .eslintrc에 추가해 보셨습니까? settings: { 'import/resolver': 'webpack' } (코드가 정상적으로 빌드되었다고 가정하고 있습니다. 그렇지 않다면 웹팩에 .ts / .tsx 파일도 해결하도록 지시해야합니다. 이는 다음과 같은 추가를 의미합니다.```module.exports = {resolve : {extensions : [ '.js', '.ts']}};```또는 가져올 수있는 파일 확장자!)
Abulafia

위의 설명은 불완전합니다. 너무 빨리 엔터를 누른 편집 시간이 다되었습니다! module.exports = { resolve: { extensions: ['.js', '.ts'] } }; 비트는 웹팩 설정에 있어야합니다!
Abulafia

app.ts파일 내용을 추가 할 수 있습니까 ?
Eastrall

답변:


291

다음 스 니펫을 .eslintrc.json구성 파일 에 추가하여 ESLint 모듈 가져 오기 분석을 설정할 수 있습니다 .

{
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },
  ...
}

리졸버에 대한 추가 정보 : https://github.com/benmosher/eslint-plugin-import#resolvers .


9
나는 다른 대답 이 이것에 대한 올바른 해결책 이라고 믿습니다 .
Izhaki

이것은 해결 듯 Unable to resolve path to module오류,하지만 지금 난 여전히 잔뜩 받고 있어요Missing file extension "tsx" for [...]
라이언

아, 'import/extensions': 0,도움 : stackoverflow.com/questions/56064609/...
라이언

47

이것은 나를 위해 그것을합니다.

.eslintrc.js

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

3
이것이 나를 위해 일한 것입니다. "plugin : import / *"확장을 포함해도 아무 효과가 없었습니다. moduleDirectory가리키는 라인은 'src/'내 말에이 작업을 얻을 수있는 핵심이었다.
mdawsondev

1
이것은 나에게도 효과적이었습니다. "moduleDirectory"키를 추가해야합니다.
Tevon Strand-Brown

moduleDirectory 추가 : [ 'node_modules', 'myModules /'] 정말 도움이되었습니다. 'moduleDirectory'속성이없는이 솔루션의 부분 버전을 보았지만 작동하지 않았습니다. 이것은 트릭을했습니다.
Yan Yankowski

moduleDirectory 추가 후 작동 : [ 'node_modules', 'src /']
밑줄

45

나는 같은 문제가 있었고 나는 그것을 사용하여 해결할 수 있었다.

"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",

여기에 설명 된대로 .eslintrc.js의 "확장"아래에 eslint-plugin-import


6
감사! 추가 "plugin:import/typescript"는 나를 위해 그것을 고친 것입니다.
charlax

이것은 나를 위해 일한 유일한 사람입니다.이 줄을 추가하고 저장하십시오. 오류가 바로 사라졌습니다!
brianyang dec

11

"eslint"를 사용 하는 경우 "typescript" 와 함께 "6.8.0 ": "3.8.3" 에 다음을 추가하는 것 외에 .eslintrc:

"settings": {
  "import/resolver": {
    "node": {
      "paths": ["src"],
      "extensions": [".js", ".jsx", ".ts", ".tsx"],
    }
  },
}

이 줄을 tsconfig.json아래 에 추가해야합니다 compilerOptions.

"compilerOptions": {
  ...
  // Base directory to resolve non-relative module names.
  "baseUrl": "src",
  ...
}

1
크게 추가 감사 baseUrl옵션을 내 일 저장
토마스 Vancoillie

1
제 경우에는 목록에 .d.ts를 추가해야했습니다. 패키지 csstypes에는 index.d.ts : "settings": { "import / resolver": { "node": { "paths": [ " src "],"extensions ": [".js ",".jsx ",".d.ts ",".ts ",".tsx "]}}}
httpete

7

이것은 나를 위해 일한 유일한 솔루션이었습니다.

먼저이 패키지를 설치해야합니다.

yarn add -D eslint-import-resolver-typescript

그런 다음이를 .eslintrc파일에 추가 하여 별칭 설정 tsconfig.json을 ESLint로 로드 할 수 있습니다 .

{
  "settings": {
    "import/resolver": {
      "typescript": {}
    },
  },
}

5

사람들을 위해 사용하는 사람 babel-module단지를 추가 extensions가이 같은 것 때문에 :

      "babel-module": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"],
        "alias": {
          "app": "./app"
        }
      }

4

tseslint 가 모두 나에게 짖어 대고 있었기 때문에 .eslintrc 파일에 다음을 추가해야했습니다 .

{ 
    ...
    "rules": {
        ....
        "import/extensions": "off"
    },
    "settings": {
        ....
        "import/resolver": {
            "node": {
                "extensions": [".js", ".jsx", ".ts", ".tsx"]
            }
        }
    }
}

이 답변에 설명 된대로 "설정"과 "규칙"이 모두 필요했습니다. 감사!
Robin Zimmermann

짖는!! 모자 off👏🏻
요기

3

확장하려면 typescript 가져 오기를 추가 한 다음 규칙에서 가져 오기를 해제해야했습니다.

"extends": {
    "plugin:import/typescript"
},
"rules": {
    "import/extensions": "off"
}

2

제 경우에는 ESLint가 DefinitelyTyped( @type/패키지) 에서 설치된 유형 을 확인할 수 없으므로 .eslintrc다음과 같이 찾을 위치를 지정해야 했습니다.

"import/resolver": {
    "typescript": {},
    "node": {
        "extensions": [".js", ".ts"],
        "paths": ["node_modules/", "node_modules/@types"]
    }
},

나는 또한 사용 "typescript": {}에서 CONFIGS를 사용하기위한 기본적 defnition을, tsconfig.json나는 한 eslint-import-resolver-typescript작동을 위해 설치.


1

누군가가 자식 디렉터리도 지원해야하는 경우. 예를 들어 다음을 지원합니다.

  1. src / components / input => 구성 요소 / 입력
  2. src / api / external / request => 외부 / 요청

    "settings": {
      "import/resolver": {
        "node": {
          "paths": ["src", "src/api"],
          "extensions": [".js", ".jsx", ".ts", ".tsx"]
        }
      }
    }
    

이것은 eslint ^ 6.1.0의 작동 예제입니다.


1

다른 답변에서 제안한 대로 .eslintrctsconfig.json파일을 업데이트 했지만 여전히 문제가있는 경우 vscode를 다시 시작하십시오.

나는이 문제에 2 시간 동안 갇혀 있었다. 그동안 간단한 재시작으로 에디터가 모듈을 찾게 만들었을 것이다.

이것이 다른 사람의 시간을 절약하기를 바랍니다!


0

먼저 "plugin:import/typescript"아래와 같이 아래 확장을 추가하십시오 .

"extends": [
    "airbnb-base",
    "plugin:import/typescript"
 ],

그런 다음 규칙 아래

"rules": {
        "import/extensions": [
            "error",
            "ignorePackages",
            {
                "ts": "never"
            }
        ]
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.