Language-tools: 别名没有解决

创建于 2020-08-20  ·  10评论  ·  资料来源: sveltejs/language-tools

描述错误
我使用了导入别名@/并且它起作用了。 然后我切换到Vite,它仅支持根别名。 所以我切换了代码以使用/@/别名。 它可以在浏览器中编译和工作,但是在vscode中给我一个错误:

image

重现
使用/@/导入

预期行为
一切正常

系统(请完成以下信息):

  • 操作系统:Ubuntu
  • IDE:VSCode
  • 插件/软件包:“ Svelte for VSCode”
Fixed bug question

最有用的评论

问题出在我们的module-loader ,它代表正常的TS分辨率,因为对“ is absolute path”的检查是正确的(在Linux中,以/开头的文件路径是绝对的)。 我认为我们需要对“此前缀是tsconfig路径的一部分”进行更多检查。

所有10条评论

您还必须通过tsconfig / jsconfig.json为打字稿配置别名

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下面是我的项目文件夹结构,恰好是后端/前端的monorepo:

.
├── 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

托管/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将不再抛出任何错误,您可以从OP的ComboBox组件屏幕截图中看到该错误。

您可以检查vscode的输出通道吗,在右侧的下拉菜单中选择了svelte。 看看你是否有这样的东西
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json并在此处发布日志。

我可以重现这一点。 由于某些原因, getDefinitionAndBoundSpan可以处理从此类位置导入的TS / JS文件,但不能处理.svelte文件。

问题出在我们的module-loader ,它代表正常的TS分辨率,因为对“ is absolute path”的检查是正确的(在Linux中,以/开头的文件路径是绝对的)。 我认为我们需要对“此前缀是tsconfig路径的一部分”进行更多检查。

OP实际上说它可以与@/ ,但我错过了。 对不起😅

我忘了说你们有多厉害。 谢谢您的快速回复

此页面是否有帮助?
0 / 5 - 0 等级