現状
TS練習用ディレクトリを作り、tsc --watch
しようとしたところ、
error TS6059: File 'S:/TypeScript/practice/promise.ts' is not under 'rootDir' 'S:/TypeScript/working'. 'rootDir' is expected to contain all source files.
The file is in the program because:
Matched by default include pattern '**/*'
というエラーが出てしまい、コンパイルできなかった。
現在のディレクトリ構成はこちら
カレントディレクトリはS:/TypeScript
既にtsconfig.json
に、以下の2つを設定してある。
- コンパイルしたいtsファイルを含むディレクトリ(rootDir)
- コンパイル先(outDir)
{
"compilerOptions": {
// 略
"rootDir": "./working",
// 略
"outDir": "./working",
// 略
}
}
やりたいこと
workingフォルダのa.tsをコンパイルし、同フォルダにa.jsを作りたい。
エラー文の一部をコピペして検索すると、
解決策として、tsconfig.jsonにrootDirとincludeの両方のオプションを設定します。
とあった。
tsconfig.json
を以下のように編集してみる。
{
"compilerOptions": {
// 略
"rootDir": "./working",
// 略
"outDir": "./working",
// 略
}
"include": ["working"]
}
これで実行してみると、先ほどとは違ったエラー文が出力された。
error TS18003: No inputs were found in config file 'S:/TypeScript/tsconfig.json'. Specified 'include' paths were '["working"]' and 'exclude' paths were '["./working"]'.
再びエラー文の一部をコピペして検索すると、
この記事のうち今回のエラーの原因に当てはまりそうな部分は、
Another thing that causes the error is if you add all the files in your TypeScript project to the exclude array by mistake.
エラーが発生したもうひとつの原因は、誤ってあなたのtsプロジェクトの全てのファイルを配列
exclude
に入れてしまったこと(かどうかです?)。
配列exclude
が何のことかわからなかったが、とりあえず指示通りに記述してみる。
{
"compilerOptions": {
// 略
"rootDir": "./working",
// 略
"outDir": "./working",
// 略
}
"include": ["working"],
"exclude": ["node_modules"]
}
これで再びtsc --watch
してみると、エラーはなくなり、a.jsファイルが生成された。
解決した方法をまとめる
{
"compilerOptions": {
// 略
"rootDir": "./working",
// 略
"outDir": "./working",
// 略
}
+ "include": ["working"],
+ "exclude": ["node_modules"]
}
なぜこれで解決したのか
現在のフォルダにはexcludeしたnode_modulesフォルダはそもそも含まれていない。
解決はしたが理屈が分からないままなので、調べてみる
Exclude -exclude
includeの解決時にスキップさせるファイル名やパターンのリストを指定します。
重要: excludeはincludeの結果として、どのファイルが含まれるべきかのみに影響を与えます。 excludeに指定されたファイルは、コードでのimportやtypesでのインクルード、/// <reference ディレクティブ、filesリストの指定によって、コードベースの一部となり得ます。
excludeはコードベースに含まれているファイルの読み込みを防ぐための仕組みではありません。include設定の結果を変更するだけです。
結局分かりませんでした。
進展あったら追記します。