1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tsc --watchの際のエラーを解消した

Last updated at Posted at 2022-11-07

現状

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 '**/*'

というエラーが出てしまい、コンパイルできなかった。

現在のディレクトリ構成はこちら

image.png

カレントディレクトリはS:/TypeScript

既にtsconfig.jsonに、以下の2つを設定してある。

  • コンパイルしたいtsファイルを含むディレクトリ(rootDir)
  • コンパイル先(outDir)
tsconfig.json
{
    "compilerOptions": {
        // 
        "rootDir": "./working",
        // 
        "outDir": "./working",
        // 
    }
}

やりたいこと

workingフォルダのa.tsをコンパイルし、同フォルダにa.jsを作りたい。

エラー文の一部をコピペして検索すると、

解決策として、tsconfig.jsonにrootDirとincludeの両方のオプションを設定します。

とあった。

tsconfig.jsonを以下のように編集してみる。

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が何のことかわからなかったが、とりあえず指示通りに記述してみる。

tsconfig.json
{
    "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設定の結果を変更するだけです。

結局分かりませんでした。
進展あったら追記します。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?