Language-tools: エイリアスが解決されない

作成日 2020年08月20日  ·  10コメント  ·  ソース: sveltejs/language-tools

バグを説明する
インポートエイリアス@/を使用しましたが、機能しました。 次に、Viteに切り替えましたが、rootエイリアスのみがサポートされています。 そこで、 /@/エイリアスを使用するようにコードを切り替えました。 コンパイルしてブラウザで動作しますが、vscodeでエラーが発生します:

image

再現するには
/@/インポートを使用する

予想される行動
すべてが機能します

システム(以下の情報を入力してください):

  • OS:Ubuntu
  • IDE:VSCode
  • プラグイン/パッケージ: "Sveltefor VSCode"
Fixed bug question

最も参考になるコメント

問題はmodule-loader内部にあり、「絶対パス」のチェックが真であるため、通常のTS解決に委任されます(Linuxでは/始まるファイルパスは絶対パスです)。 「このプレフィックスはtsconfigパスの一部ですか」について追加のチェックが必要だと思います。

全てのコメント10件

また、tsconfig / jsconfig.jsonを使用して、typescriptのエイリアスを構成する必要があります。

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

tscが問題なくコンパイルできるという同じ問題にも直面しています。 ただし、 svelte-checkようなツールは、エイリアスパスを正しく解決できず、OPのようなエラーをスローします。 language-toolsがプロジェクトフォルダのtsconfig.jsonを正しく解決できないことに関連するバグがあるようです。

Screenshot 2020-08-21 at 13 06 57

このエラーは、svelte2tsxによって挿入された特別なプロパティを使用してコンポーネントのタイプチェックを行ったためです。 実際のファイルが見つからない場合、svelte2tsxを使用してファイルを変換することはできません。

@cayter tsconfigをどこに置きますか?

@ jasonlyu123以下は、バックエンドとフロントエンドの両方のモノリポジトリである私のプロジェクトフォルダ構造です。

.
├── 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/*"]
}

実際のファイルが見つからない場合、svelte2tsxを使用してファイルを変換することはできません。

はい、これはプロジェクトのtsconfig.json定義されているエイリアスパス解決が尊重されていないことに関連しています。 したがって、エイリアスパスを使用する代わりに相対パスに変更すると、vscode拡張機能とsvelte-checkは、 ComboBoxコンポーネントのOPのスクリーンショットからわかるエラーをスローしなくなります。

vscodeの出力チャンネルを確認できますか?右側のドロップダウンでsvelteを選択してください。 そして、あなたがこのようなものを持っているかどうかを確認してください
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.jsonそしてここにログを投稿してください。

これを再現できます。 何らかの理由で、 getDefinitionAndBoundSpanはそのような場所からインポートされたTS / JSファイルを処理できますが、 .svelteファイルは処理できません。

問題はmodule-loader内部にあり、「絶対パス」のチェックが真であるため、通常のTS解決に委任されます(Linuxでは/始まるファイルパスは絶対パスです)。 「このプレフィックスはtsconfigパスの一部ですか」について追加のチェックが必要だと思います。

OPは実際に@/で動作すると言っていましたが、私はそれを見逃しました。 申し訳ありません😅

私はあなたたちがどれほど素晴らしいかを言うのを忘れました。 迅速な対応ありがとうございました

このページは役に立ちましたか?
0 / 5 - 0 評価