繁体   English   中英

Typescript 编译器在 tsconfig.json 上包含文件时找不到绝对路径

[英]Typescript compiler not finding absolute paths when including files on tsconfig.json

我在 JS 中导入模块时尝试使用绝对路径,不幸的是tsc无法正确解析路径返回错误:

模块名称“test2”未解析。

我有以下文件结构

project
│
└───tsconfig.json
└───js
│   └───another
│   │   └───child
│   │       │  test1.js
│   │
│   └───some
│       │  test2.js

这是test1.js代码:

import { sayHi } from "test2";
sayHi("John");

这是test2.js代码:

function sayHi(user) {
  alert(`Hello, ${user}!`);
}

export { sayHi };

这是我的tsconfig.json

{
  "compilerOptions": {
    "noEmit": true,
    "allowJs": true
  },
  "include": [
    "js/**/*"
  ],
  "exclude": []
}

当我运行tsc --traceResolution时通过 CLI 命令,我得到以下信息:

╰─ tsc --traceResolution
======== Resolving module 'test2' from '/Users/Sites/LocalTests/js/another/child/test1.js'. ========
Module resolution kind is not specified, using 'NodeJs'.
Loading module 'test2' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/Users/Sites/LocalTests/js/another/child/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/js/another/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/js/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/node_modules' does not exist, skipping all lookups in it.
Directory '/node_modules' does not exist, skipping all lookups in it.
Loading module 'test2' from 'node_modules' folder, target file type 'JavaScript'.
Directory '/Users/Sites/LocalTests/js/another/child/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/js/another/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/js/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/LocalTests/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/Sites/node_modules' does not exist, skipping all lookups in it.
Directory '/Users/node_modules' does not exist, skipping all lookups in it.
Directory '/node_modules' does not exist, skipping all lookups in it.
======== Module name 'test2' was not resolved. ========

我如何设置它,以便它不仅在目录中搜索,而且在同级目录中搜索。 查看返回的跟踪,它似乎从未查看/some目录,因此从未找到test2.js

查看其他帖子,似乎我可以在路径中添加/somepaths: tsconfig.json的部分,但这意味着我必须手动添加每个路径,这没有意义,因为我计划使用多个目录随着这个项目的扩展。

另外,如果您想知道,我计划在 VScode 上使用这个tsconfig.json文件来查找绝对路径并允许其“转到定义”功能正常工作。

这不应该工作。 当您导入"test2"时,TypeScript 编译器无法知道在哪里可以找到您的文件。

此外, "test2"是文件名,而不是绝对路径。 要使其成为绝对路径,它需要从硬盘驱动器的根目录开始的路径,这显然是不好的做法,因为它会使您的代码具体取决于文件在您的机器上的存储位置。

TypeScript 编译器查找导入的方式是:

  • 如果是相对路径,请按照它
  • 如果没有,在node_modules中搜索
  • 如果没有,请在父文件夹的node_modules中搜索
  • 继续这样做直到找到

所以你需要你的文件有一个相对路径,或者你需要它是一个npm模块。

一个可能对您有所帮助的功能是路径映射,它允许您为 TypeScript 定义要查找的自定义路径,您可以在这种情况下使用它。

例如:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "test2": ["some/test2.js"], // This mapping is relative to "baseUrl"
      "some/*": ["some/*"] // You could use this to then import "some/test2"
    }
  }
}

您必须将其添加到您的 tsconfig.json

{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "src/*": [
        "./src/*"
      ],
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM