Mam ten import w moim pliku app.spec.ts :
import app from './app';
Co powoduje ten błąd maszynopisu
2:17 error Unable to resolve path to module './app' import/no-unresolved
./app.ts istnieje, ale nie skompilowałem pliku .ts do pliku .js. Jak tylko skompiluję plik .ts do .js, błąd zniknie.
Jednak ponieważ eslint ma działać z maszynopisem, powinien rozwiązywać moduły z .ts, a nie .js.
Dodałem również informacje na maszynie do mojego eslint
pliku konfiguracyjnego:
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
}
Jak skonfigurować eslint w taki sposób, aby próbował rozwiązać moduły z .ts, a nie .js?
Twoje zdrowie!
EDYCJA # 1
Treść 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;
typescript
eslint
maximedupre
źródło
źródło
"plugins": ["@typescript-eslint"]
? Dokumenty github.com/typescript-eslint/typescript-eslint/tree/master/…Unable to resolve path to module './app'
settings: { 'import/resolver': 'webpack' }
(Zakładam, że kod buduje się dobrze. Jeśli nie, będziesz musiał powiedzieć webpackowi, aby rozwiązał również pliki .ts / .tsx, co oznacza dodanie czegoś takiego jak: `` module.exports = {rozwiąż: {rozszerzenia: [ '.js', '.ts']}}; `` lub jakiekolwiek rozszerzenia plików, które chcesz importować!)module.exports = { resolve: { extensions: ['.js', '.ts'] } };
Bit powinien być w swoim WebPACK config!app.ts
pliku?Odpowiedzi:
Możesz ustawić rozdzielczość importu modułu ESLint, dodając ten fragment do
.eslintrc.json
pliku konfiguracyjnego:{ "settings": { "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } }, ... }
Więcej informacji na temat resolverów: https://github.com/benmosher/eslint-plugin-import#resolvers .
źródło
Unable to resolve path to module
błąd, ale teraz wciąż otrzymuję kilkaMissing file extension "tsx" for [...]
'import/extensions': 0,
pomogłem: stackoverflow.com/questions/56064609/…Robi to dla mnie:
.eslintrc.js
{ ... settings: { ... 'import/resolver': { node: { extensions: ['.js', '.jsx', '.ts', '.tsx'], moduleDirectory: ['node_modules', 'src/'], }, }, } }
źródło
moduleDirectory
Linia wskazując'src/'
był klucz do uzyskać tej pracy na mój koniec.Miałem ten sam problem i mogłem go naprawić tylko za pomocą
"plugin:import/errors", "plugin:import/warnings", "plugin:import/typescript",
pod "extends" w .eslintrc.js, jak opisano tutaj eslint-plugin-import
źródło
"plugin:import/typescript"
jest tym, co naprawiło to dla mnie.W przypadku korzystania z „eslint”: „6.8.0” z „maszynopisem”: „3.8.3” oprócz dodania następujących elementów do
.eslintrc
:"settings": { "import/resolver": { "node": { "paths": ["src"], "extensions": [".js", ".jsx", ".ts", ".tsx"], } }, }
Musisz również dodać tę linię
tsconfig.json
podcompilerOptions
:"compilerOptions": { ... // Base directory to resolve non-relative module names. "baseUrl": "src", ... }
źródło
baseUrl
opcji, uratowałem mój dzieńTo było jedyne rozwiązanie, które działało dla mnie.
Najpierw musisz zainstalować ten pakiet:
Następnie dodaj to do swojego
.eslintrc
pliku, aby mógł załadować ustawienia aliasu z twojegotsconfig.json
do ESLint:{ "settings": { "import/resolver": { "typescript": {} }, }, }
źródło
dla tych, którzy używają
babel-module
wystarczy dodać,extensions
więc byłoby coś takiego:"babel-module": { "extensions": [".js", ".jsx", ".ts", ".tsx"], "alias": { "app": "./app" } }
źródło
Zarówno ts, jak i eslint szczekali na mnie, więc musiałem dodać do mojego pliku .eslintrc :
{ ... "rules": { .... "import/extensions": "off" }, "settings": { .... "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } } }
źródło
Musiałem dodać import maszynopisu do rozszerzeń, a następnie wyłączyć importowanie w regułach:
"extends": { "plugin:import/typescript" }, "rules": { "import/extensions": "off" }
źródło
W moim przypadku ESLint nie był w stanie rozwiązać typów zainstalowanych z
DefinitelyTyped
(@type/
pakietów), więc musiałem określić, gdzie je znaleźć.eslintrc
:"import/resolver": { "typescript": {}, "node": { "extensions": [".js", ".ts"], "paths": ["node_modules/", "node_modules/@types"] } },
Używam również
"typescript": {}
definicji, która jest w zasadzie do używania konfiguracji ztsconfig.json
ieslint-import-resolver-typescript
zainstalowałem ją, aby działała.źródło
Na wypadek, gdyby ktoś również potrzebował obsługi katalogu podrzędnego. Na przykład obsługuje
src / api / external / request => external / request
"settings": { "import/resolver": { "node": { "paths": ["src", "src/api"], "extensions": [".js", ".jsx", ".ts", ".tsx"] } } }
To działa przykład dla eslint ^ 6.1.0
źródło
Jeśli zaktualizowałeś pliki
.eslintrc
itsconfig.json
zgodnie z sugestiami w innych odpowiedziach, a nadal masz problem ... uruchom ponownie vscode.Utknąłem na tym problemie przez dwie godziny, przez cały czas prosty restart spowodowałby, że edytor znalazłby moduł.
Mam nadzieję, że to zaoszczędzi czas komuś innemu!
źródło
Najpierw dodaj
"plugin:import/typescript"
pod rozszerzeniami jak poniżej:"extends": [ "airbnb-base", "plugin:import/typescript" ],
następnie poniżej zgodnie z zasadami
"rules": { "import/extensions": [ "error", "ignorePackages", { "ts": "never" } ] }
źródło