JavaScript
TypeScript

TypeScript 3.4のincrementalフラグを試す


はじめに

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.

と怒られました。そういうものなのでしょうか。