簡體   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