टाइपस्क्रिप्ट के साथ एस्लिंट का उपयोग करना - मॉड्यूल के लिए पथ को हल करने में असमर्थ


124

मेरी फ़ाइल app.spec.ts में यह आयात है :

import app from './app';

जो इस टाइपस्क्रिप्ट त्रुटि का कारण बनता है

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

./app.ts मौजूद है, लेकिन मैंने .js फ़ाइल में .ts फ़ाइल संकलित नहीं की है। जैसे ही मैं .ts फ़ाइल को .js पर संकलित करता हूं, त्रुटि दूर हो जाती है।

हालाँकि, चूंकि एस्लिंट को टाइपस्क्रिप्ट के साथ काम करना चाहिए, इसलिए इसे .ts के साथ मॉड्यूल को हल करना चाहिए, न कि .js को।

मैंने अपनी eslintकॉन्फ़िग फ़ाइल में टाइपस्क्रिप्ट जानकारी भी जोड़ी है :

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

मैं एस्लिंट को इस तरह से कैसे कॉन्फ़िगर कर सकता हूं कि यह मॉड्यूल के साथ .ts और .js को हल करने की कोशिश करता है?

चीयर्स!

EDIT # 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/…
Jasmonate

1
अरे @ जस्माते, जवाब के लिए धन्यवाद! इसलिए मैंने अभी इस विन्यास को जोड़ा है, और जब मैं अब कुछ टाइपस्क्रिप्ट-विशिष्ट लाइनिंग कर सकता हूं, तो यह मेरी समस्या का समाधान नहीं करता है। मुझे अभी भी मिल रहा हैUnable to resolve path to module './app'
अधिकतम

क्या आपने इसे अपने .eslintrc में जोड़ने की कोशिश की है? settings: { 'import/resolver': 'webpack' } (मैं मान रहा हूं कि कोड ठीक बनाता है। यदि नहीं, तो आपको वेब के लिए .ts / .tsx फ़ाइलों को हल करने के लिए बताने की आवश्यकता होगी, जिसका अर्थ है कुछ जोड़ना जैसे: `` मॉड्यूल.एक्सपोर्ट = {संकल्प: {एक्सटेंशन: [ '.js', '.ts']}}; `` `या आप जो भी फ़ाइल एक्सटेंशन आयात करना चाहते हैं!)
अबुलाफिया

उपरोक्त टिप्पणी अधूरी है, मुझे डर है! मैं संपादन समय से बाहर प्रवेश कर रहा हूँ बहुत जल्द ही प्रेस! module.exports = { resolve: { extensions: ['.js', '.ts'] } }; बिट अपने webpack config में होना चाहिए!
अबुलाफिया

क्या आप अपनी app.tsफ़ाइल की सामग्री जोड़ सकते हैं ?
ईस्टर्न

जवाबों:


291

आप इस स्निपेट को अपनी .eslintrc.jsonकॉन्फ़िगरेशन फ़ाइल में जोड़कर ESLint मॉड्यूल आयात रिज़ॉल्यूशन सेट कर सकते हैं :

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

रिज़ॉल्वर के बारे में अधिक जानकारी: https://github.com/benmosher/eslint-plugin-import#resolvers


9
मेरा मानना ​​है कि अन्य उत्तर इसके लिए सही समाधान है।
22

यह हल करने के लिए लग रहा था 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
इसी से मेरा काम बना है; यहां तक ​​कि "प्लगइन: आयात / *" एक्सटेंशन सहित कुछ भी नहीं किया। यह moduleDirectoryइंगित करने वाली रेखा 'src/'मेरे अंत में इस काम को प्राप्त करने की कुंजी थी।
mdawsondev

1
यह मेरे लिए भी काम किया। ध्यान दें कि "मॉड्यूलडायरेक्टरी" कुंजी को जोड़ने के लिए HAD।
टेवॉन स्ट्रैंड-ब्राउन

मॉड्यूलडायरेक्टरी को जोड़ना: ['node_modules', 'myModules /'] वास्तव में मदद करता है। मैंने 'मॉड्यूलडायरेक्टरी' संपत्ति के बिना इस समाधान का एक आंशिक संस्करण देखा है और यह काम नहीं किया। इसने एक तरकीब की।
यान यांकोवस्की

मॉड्यूल जोड़ने के बाद काम करता हैडायरेक्टरी: ['नोड_मॉड्यूल्स', 'src /']
अंडरस्कोर

45

मेरे पास एक ही समस्या थी और मैं केवल इसका उपयोग करने में सक्षम था

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

के रूप में "विस्तार" के अंतर्गत .lllrrc.js यहां बताए जा रहे हैं जैसे कि एस्लिंट-प्लगइन-आयात


6
धन्यवाद! जोड़ना "plugin:import/typescript"मेरे लिए यह तय है।
चारलेक्स

यह केवल वही है जिसने मेरे लिए काम किया है, बस इस पंक्ति को जोड़ें और बचाएं। त्रुटि तुरंत चली गई!
ब्रायनयांग

11

"एस्लिंट" का उपयोग करते समय : "टाइपस्क्रिप्ट" के साथ "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विकल्पों को जोड़ने के लिए बहुत सराहना की गई, मेरे दिन को बचाया
टॉमस वैंकूलेई

1
मेरे मामले में मुझे सूची में .d.ts को जोड़ना था- पैकेज csstypes में केवल एक index.d.ts होता है: "सेटिंग": {"आयात / रिज़ॉल्वर": {"नोड": {"पथ": [" src "]," एक्सटेंशन ": [" .js "," .jsx "," .d.ts "," .ts "," .tsx "]}}}
httpete

7

यह एकमात्र समाधान था जिसने मेरे लिए काम किया।

सबसे पहले, आपको इस पैकेज को स्थापित करने की आवश्यकता है:

yarn add -D eslint-import-resolver-typescript

फिर .eslintrcइसे अपनी फ़ाइल में जोड़ें ताकि यह आपके tsconfig.jsonईएसएलएन्ट से अन्य सेटिंग्स को लोड कर सके:

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

5

जो लोग इसका उपयोग करते हैं, babel-moduleवे सिर्फ extensionsइतना जोड़ते हैं कि यह कुछ इस तरह होगा:

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

4

Ts और eslint दोनों मुझ पर भौंक रहे थे, इसलिए मुझे अपनी .llintrc फ़ाइल में निम्न जोड़ना पड़ा।

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

मुझे इस जवाब में वर्णित "सेटिंग्स" और "नियम" दोनों की आवश्यकता थी। धन्यवाद!
रॉबिन ज़िम्मरमैन

भौंकने !! सलाम ऑफ 6:
योगी

3

मुझे टाइपस्क्रिप्ट आयात को विस्तार में जोड़ना था और फिर नियमों में आयात बंद करना था:

"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": {}चूक का भी उपयोग करता हूं, जो मूल रूप से कॉन्फ़िगर का उपयोग करने के लिए है 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"]
        }
      }
    }
    

यह उदाहरण के लिए काम कर रहा है ^ 6.1.0


0

यदि आपने अपनी .eslintrcऔर tsconfig.jsonफ़ाइलों को अन्य उत्तरों में सुझाए अनुसार अपडेट किया है, और आपको अभी भी समस्या है ... vscode को पुनरारंभ करें।

मैं दो घंटे के लिए इस समस्या पर अटक गया, जबकि एक सरल पुनरारंभ ने संपादक को मॉड्यूल ढूंढ लिया होगा।

आशा है कि यह किसी और को समय बचाता है!


0

पहले "plugin:import/typescript"नीचे दिए गए विस्तार में जोड़ें :

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

फिर नियमों के तहत नीचे

"rules": {
        "import/extensions": [
            "error",
            "ignorePackages",
            {
                "ts": "never"
            }
        ]
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.