Language-tools: Alias ​​wird nicht aufgelöst

Erstellt am 20. Aug. 2020  ·  10Kommentare  ·  Quelle: sveltejs/language-tools

Beschreibe den Fehler
Ich habe den Import-Alias @/ und es hat funktioniert. Dann bin ich zu Vite gewechselt und es werden nur Root-Aliase unterstützt. Also habe ich meinen Code auf /@/ Aliase umgestellt. Es kompiliert und funktioniert im Browser, gibt mir aber einen Fehler in vscode:

image

Fortpflanzen
Verwenden Sie den Import von /@/

Erwartetes Verhalten
funktioniert alles

System (bitte vervollständigen Sie die folgenden Informationen):

  • Betriebssystem: Ubuntu
  • IDE: VSCode
  • Plugin / Paket: "Svelte for VSCode"
Fixed bug question

Hilfreichster Kommentar

Das Problem liegt in unserem module-loader , das an die normale TS-Auflösung delegiert, da die Prüfung auf "ist absoluter Pfad" wahr ist (Dateipfade, die mit / sind unter Linux absolut). Ich denke, wir brauchen zusätzliche Überprüfungen für "Ist dieses Präfix Teil der tsconfig-Pfade?".

Alle 10 Kommentare

Sie müssen auch den Alias ​​für Typoskript über tsconfig / jsconfig.json konfigurieren

https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

Ich stehe auch vor dem gleichen Problem, mit dem tsc gut kompilieren kann. Tools wie svelte-check können den Alias-Pfad jedoch nicht korrekt auflösen und Fehler wie OP auslösen. Es scheint, als gäbe es einen Fehler im Zusammenhang mit language-tools nicht in der Lage ist, tsconfig.json im Projektordner korrekt aufzulösen?

Screenshot 2020-08-21 at 13 06 57

Dieser Fehler ist darauf zurückzuführen, dass wir eine spezielle Eigenschaft verwendet haben, die von svelte2tsx injiziert wurde, um die Komponententypprüfung durchzuführen. Wenn wir die eigentliche Datei nicht finden können, können wir die Datei nicht mit svelte2tsx transformieren.

@cayter wo

@ jasonlyu123 Unten ist meine Projektordnerstruktur, die zufällig ein Monorepo für Backend / Frontend ist:

.
├── Makefile
├── README.md
├── database
│   └── database.rules.json
├── firebase.json
├── firestore
│   ├── firestore.indexes.json
│   └── firestore.rules
├── functions // backend code
│   ├── package-lock.json
│   ├── package.json
│   ├── src
│   │   └── index.ts
│   └── tsconfig.json
├── hosting // frontend PWA code
│   ├── ...
│   ├── src
│   │   ├── components
│   │   │   ├── App.svelte
│   │   │   └── ...
│   │   ├── images
│   │   │   ├── cover.png
│   │   │   └── ...
│   │   ├── index.css
│   │   ├── index.ts
│   │   ├── pages
│   │   │   ├── Auth
│   │   │   │   └── ...
│   │   │   ├── Error
│   │   │   │   └── ...
│   │   │   ├── Home
│   │   │   │   └── ...
│   │   │   └── User
│   │   │       └── ...
│   │   └── stores
│   │       └── ...
│   ├── svelte.config.js
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   ├── vite.config.ts
│   └── workbox.config.js
├── package-lock.json
└── package.json

Hosting / tsconfig.json

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "baseUrl": "src",
    "declaration": true,
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "importHelpers": true,
    "importsNotUsedAsValues": "error",
    "isolatedModules": true,
    "lib": ["dom", "esnext", "es6"],
    "module": "esnext",
    "moduleResolution": "node",
    "noEmit": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "rootDir": "src",
    "skipLibCheck": true,
    "sourceMap": true,
    "strict": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictNullChecks": true,
    "target": "esnext",
    "types": ["jest", "node", "svelte"],
    "paths": {
      "/@/*": ["*"]
    }
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules/*", "public/*"]
}

Wenn wir die eigentliche Datei nicht finden können, können wir die Datei nicht mit svelte2tsx transformieren.

Ja, dies ist relevant für die Alias-Pfadauflösung, die in tsconfig.json des Projekts definiert ist und nicht berücksichtigt wird. Wenn wir es also in einen relativen Pfad ändern, anstatt einen Alias-Pfad zu verwenden, werfen die vscode-Erweiterung und die svelte-Prüfung keinen Fehler mehr auf, den Sie im OP-Screenshot für die ComboBox -Komponente sehen können.

Können Sie den Ausgangskanal von vscode überprüfen, wählen Sie in der Dropdown-Liste rechts svelte. Und sehen Sie, ob Sie so etwas haben
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json und poste das Log hier.

Ich kann das reproduzieren. Aus irgendeinem Grund kann getDefinitionAndBoundSpan mit TS / JS-Dateien umgehen, die von solchen Speicherorten importiert wurden, jedoch nicht mit .svelte -Dateien.

Das Problem liegt in unserem module-loader , das an die normale TS-Auflösung delegiert, da die Prüfung auf "ist absoluter Pfad" wahr ist (Dateipfade, die mit / sind unter Linux absolut). Ich denke, wir brauchen zusätzliche Überprüfungen für "Ist dieses Präfix Teil der tsconfig-Pfade?".

OP sagte tatsächlich, dass es mit @/ funktioniert und ich habe es verpasst. Entschuldigung 😅

Ich habe vergessen zu sagen, wie großartig ihr seid. Danke für die schnelle Antwort

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

PatrickG picture PatrickG  ·  3Kommentare

matthewmueller picture matthewmueller  ·  3Kommentare

NickKaramoff picture NickKaramoff  ·  4Kommentare

koddr picture koddr  ·  6Kommentare

maximedupre picture maximedupre  ·  5Kommentare