'error TS6059: File is not under 'rootDir' .. 'rootDir' is expected to contain all source files
I am getting this fairly non-sensical tsc transpilation error:
error TS6059: File '/Users/alex/codes/interos/teros-cli/src/logging.ts' is not under 'rootDir' '/Users/alex/codes/teros/notifier-server/src'. 'rootDir' is expected to contain all source files.
my PWD is /Users/alex/codes/teros/notifier-server and the tsconfig.json file for /Users/alex/codes/teros/notifier-server/tsconfig.json is:
{
"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"
]
}
this seems like a bug..since teros-cli dir is outside the PWD, and is governed by a separate tsconfig.json file.
I even changed this field to:
"include": [
"/Users/alex/codes/teros/notifier-server/src"
],
"exclude": [
"/Users/alex/codes/teros/teros-cli"
]
still get the same error.
Solution 1:[1]
What is rootDir?
rootDir is set to a root folder, that contains all your source files. If not specified, TS will automatically choose a suitable parent folder of all inputs. rootDir also determines the output directory.
What does the error mean?
My guess is you have an import statement for logging.ts somewhere in notifier-server:
import {logger} from "@teros-cli/logging" // or similar
Then logging.ts module will be automatically included by the compiler, regardless of include and exclude options in tsconfig.json. One way to check all included files is tsc --listFiles.
A tsconfig.json file outside notifier-server doesn't help here. The compiler picks up exactly one config per tsc compilation and optionally pulls inherited configs. If it cannot find one in notifier-server project root (where you started tsc), only then the compiler searches upwards the parent directory chain, until a config is found.
Possible solutions
One fix is to just remove "rootDir": "src" from compiler options, so it gets set automatically. Caution: rootDir will then consider both projects as inputs!
Alternative: You can add a separate logging.ts module contained in notifier-server/src project and drop the external import.
Hope, that helps!
Solution 2:[2]
In my case the reason was a circular dependency. So e.g.:
// Page.ts
import { Grid } from "./components/Grid";
export const test = "";
// Grid.ts
import { test } from "../Page"; // circular dep!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Sergei Basharov |
| Solution 2 | Damiano |
