はじめに
TypeScript 3.4のリリースノートの最初で説明されているのは「Faster subsequent builds」です。 --incremental
というフラグが導入されました。
incrementalフラグとは
これを指定すると、tsconfig.tsbuildinfo
というファイルが作成されます。(ファイル名の変更は可能)
このファイルにはコンパイルしたファイルのバージョン(SHA256ハッシュ?)が記録されていて、変更があった分だけをコンパイルし直すようです。結果的にコンパイル時間が短縮されることが期待されます。
noEmitでは効かない
タイプチェックだけをする場合は--noEmit
フラグをつけることがありますが、この場合は出力ファイルが生成されないため、tsconfig.tsbuildinfo
も生成されません。結果、高速化は効きませんでした。--tsBuildInfoFile
を指定しても変わらないようです。
速度計測
簡単ですが、何もファイルに変更を加えず、とあるプロジェクトでコンパイル時間を測ってみました。
$ time npx tsc --project .
npx tsc --project . 14.89s user 0.71s system 135% cpu 11.519 total
$ time npx tsc --project .
npx tsc --project . 3.11s user 0.22s system 157% cpu 2.123 total
1回目が15秒弱で、2回目が3秒ちょっとでした。
--noEmit
しても13秒ほどかかるので、コンパイル結果が不要でも出力しちゃった方が早いというジレンマ。
おわりに
--incremental
をtscに書いたら、
error TS6064: Option 'incremental' can only be specified in 'tsconfig.json' file.
と怒られました。そういうものなのでしょうか。