Language-tools: Alias ​​não foi resolvido

Criado em 20 ago. 2020  ·  10Comentários  ·  Fonte: sveltejs/language-tools

Descreva o bug
Usei o alias de importação @/ e funcionou. Então mudei para o Vite e ele suporta apenas aliases de raiz. Então mudei meu código para usar /@/ aliases. Ele compila e funciona no navegador, mas me dá um erro no vscode:

image

Reproduzir
Use /@/ import

Comportamento esperado
Tudo funciona

Sistema (preencha as seguintes informações):

  • SO: Ubuntu
  • IDE: VSCode
  • Plugin / Pacote: "Svelte para VSCode"
Fixed bug question

Comentários muito úteis

O problema está dentro de nosso module-loader , que delega para a resolução TS normal porque a verificação de "é o caminho absoluto" é verdadeira (caminhos de arquivo começando com / são absolutos no Linux). Acho que precisamos de verificações adicionais para "este prefixo faz parte dos caminhos tsconfig".

Todos 10 comentários

Você também terá que configurar o alias para typescript embora tsconfig / jsconfig.json

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

Também estou enfrentando o mesmo problema de que tsc pode compilá-lo perfeitamente. No entanto, ferramentas como svelte-check não serão capazes de resolver o caminho do alias corretamente e lançar erros como OP. Parece que há um bug relacionado ao fato de language-tools não conseguir resolver tsconfig.json na pasta do projeto corretamente?

Screenshot 2020-08-21 at 13 06 57

Esse erro ocorre porque usamos algumas propriedades especiais injetadas por svelte2tsx para fazer a verificação de tipo de componente. Se não conseguirmos encontrar o arquivo real, não podemos transformá-lo usando svelte2tsx.

@cayter onde você coloca seu tsconfig?

@ jasonlyu123 Abaixo está a estrutura de pastas do meu projeto, que é um monorepo para backend / frontend:

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

Se não conseguirmos encontrar o arquivo real, não podemos transformá-lo usando svelte2tsx.

Sim, isso é relevante para a resolução do caminho do alias definido no projeto tsconfig.json não está sendo honrado. Portanto, se mudarmos para o caminho relativo em vez de usar o caminho alternativo, a extensão vscode e a verificação svelte não irão gerar mais nenhum erro que você pode ver na captura de tela do OP para o componente ComboBox .

Você pode verificar o canal de saída do vscode, escolha svelte no menu suspenso à direita. E veja se você tem algo assim
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json e poste o log aqui.

Eu posso reproduzir isso. Por alguma razão, getDefinitionAndBoundSpan pode lidar com arquivos TS / JS importados de tais locais, mas não com arquivos .svelte .

O problema está dentro de nosso module-loader , que delega para a resolução TS normal porque a verificação de "é o caminho absoluto" é verdadeira (caminhos de arquivo começando com / são absolutos no Linux). Acho que precisamos de verificações adicionais para "este prefixo faz parte dos caminhos tsconfig".

OP realmente disse que funciona com @/ e eu perdi isso. Desculpe 😅

Eu esqueci de dizer o quão incrível vocês são. Obrigado pela resposta rápida

Esta página foi útil?
0 / 5 - 0 avaliações