46

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

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

我的密码是/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"
  ]
}

这似乎是一个错误..因为 teros-cli 目录在 PWD 之外,并且由单独的 tsconfig.json 文件管理。

我什至将此字段更改为:

  "include": [
    "/Users/alex/codes/teros/notifier-server/src"
  ],
  "exclude": [
    "/Users/alex/codes/teros/teros-cli"
  ]

仍然得到同样的错误。

4

1 回答 1

46

是什么rootDir

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

错误是什么意思?

我的猜测是你在某处有一个import声明:logging.tsnotifier-server

import {logger} from "@teros-cli/logging" // or similar

然后logging.ts模块将被编译器自动包含include,不管exclude. tsconfig.json检查所有包含文件的一种方法是tsc --listFiles.

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

可能的解决方案

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

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

希望,这有帮助!

于 2019-08-09T11:29:20.193 回答