概要
https://www.typescriptlang.org/tsconfig#rootDir
{
"rootDir": "./src"
}
コンパイル結果をoutDirで出力する際に、どのディレクトリ配下のディレクトリ構造で出力するかを指定します。
filesやincludeとは違い、コンパイル対象を決めるオプションではありません。
逆に、コンパイル対象となるファイルは全てrootDir
で指定するディレクトリ配下に存在する必要があります。
詳細
例えば下記のディレクトリ構造で、rootDir
を./src
にしたとします。
.
├── index.ts
├── package-lock.json
├── package.json
├── src
│ ├── hoge.ts
│ └── piyo
│ ├── foo
│ │ └── foo.ts
│ └── piyo.ts
└── tsconfig.json
{
"outDir": "./dist",
"rootDir": "./src"
}
filesやincludeを指定していないので、コンパイル対象はtsconfig.json
の存在するディレクトリ配下の全ての.ts
、.tsx
ファイルとなります。
この状態でコンパイルを実行すると、コンパイル対象がrootDir
で指定したディレクトリ外に存在するため、以下のようにエラーが出ます。
error TS6059: File '/path/to/index.ts' is not under 'rootDir' '/path/to/src'. 'rootDir' is expected to contain all source files.
これは、ルートディレクトリに存在するindex.ts
がコンパイル対象にも関わらずrootDir
で指定しているディレクトリ./src
配下に存在しないからです。
includeでコンパイル対象を./src/**/*
にすれば、rootDir
に全てのコンパイル対象が含まれるためコンパイルが通ります。
{
"include": ["src/**/*"],
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
}
}
コンパイル結果は下記のようになります。
(./dist
のみ記載)
dist/
├── hoge.js
└── piyo
├── foo
│ └── foo.js
└── piyo.js
この出力結果は、rootDir
で指定している./src
配下と同じディレクトリ構成になります。