错误 TS6059:文件不在“rootDir”下..“rootDir”应包含所有源文件

29 typescript tsc

我收到了这个相当无意义的 tsc 转译错误:

错误 TS6059:文件“/Users/alex/codes/interos/teros-cli/src/logging.ts”不在“rootDir”“/Users/alex/codes/teros/notifier-server/src”下。'rootDir' 应包含所有源文件。

我的 PWD/Users/alex/codes/teros/notifier-server和 tsconfig.json 文件/Users/alex/codes/teros/notifier-server/tsconfig.json是:

{
  "compilerOptions": {
    "outDir": "dist",
    "allowJs": false,
    "pretty": true,
    "resolveJsonModule": true,
    "sourceMap": false,
    "skipLibCheck": true,
    "rootDir": "src",
    "declaration": false,
    "baseUrl": ".",
    "target": "es2018",
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "allowUnreachableCode": true,
    "lib": [
      "es2017",
      "es2018"
    ]
  },
  "compileOnSave": false,
  "include": [
    "src"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个bug..since TEROS-CLI dir是PWD外,通过单独的tsconfig.json文件管理。

我什至将此字段更改为:

  "include": [
    "/Users/alex/codes/teros/notifier-server/src"
  ],
  "exclude": [
    "/Users/alex/codes/teros/teros-cli"
  ]
Run Code Online (Sandbox Code Playgroud)

仍然得到同样的错误。

for*_*d04 32

什么是rootDir

rootDir设置为包含所有源文件的根文件夹。如果未指定,TS 将自动为所有输入选择一个合适的父文件夹。rootDir决定了输出目录

错误是什么意思?

我的猜测是你有一个import关于logging.ts某处的声明notifier-server

import {logger} from "@teros-cli/logging" // or similar
Run Code Online (Sandbox Code Playgroud)

然后logging.ts模块将被自动包含编译器,无论includeexclude选项tsconfig.json。检查所有包含文件的一种方法是tsc --listFiles.

tsconfig.json外面的文件在notifier-server这里没有帮助。编译器每次编译只选取一个配置,tsc并可选择拉取继承的配置。如果在notifier-server项目根目录(您开始的地方tsc)中找不到,则编译器只会向上搜索父目录链,直到找到配置。

可能的解决方案

一种解决方法是"rootDir": "src"从编译器选项中删除,因此它会自动设置。注意:rootDir然后将两个项目都视为输入!

替代方案:您可以添加logging.ts包含在notifier-server/src项目中的单独模块并删除外部import.

希望,这有帮助!

  • 另一种选择是使用项目参考。请参阅[此答案](/sf/answers/4302723841/)来处理“rootDir”问题并使用项目参考来管理内部依赖关系。事情将开始变得更有意义。 (6认同)

Dam*_*ano 5

paths我通过复制 s 得到了这个错误tsconfig。删除后者解决了这个问题:

// ./tsConfig.json
"paths": {
  "@myPackage": ["./myPackage/index.ts"],
},

// ./MY_OTHER_PACKAGE/tsConfig.json
"paths": {
 "@myPackage": ["../myPackage/index.ts"]
},
Run Code Online (Sandbox Code Playgroud)