投稿日:2020年11月12日
TSConfigはTypeScriptやJavaScriptのプロジェクトの設定を記述するファイルです。
TypeScriptの場合にはtsconfig.json、JavaScriptの場合にはjsconfig.jsonをそれぞれプロジェクトのルートに作成します。
VSCodeのインテリセンスなどはこの設定ファイルを元に参照を解決するので、
TypeScriptのプロジェクトを作成したらまずこのファイルを作成しましょう。
$ mkdir ts_sample_proj
$ cd ts_sample_proj/
$ touch tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs"
}
}
トランスパイル対象としてサンプルの.tsファイルが必要ですね。
作成しましょう!
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
console.log(greeter.greet());
このtsではES5では使用できないclassを使用しています。
正しくES5にトランスパイルできればclassが何か別の表現に置き換わるはずです。
コンパイルしてみましょう。
tscコマンドは引数にファイルを指定しなければ、そのディレクトリの全ての.tsファイルをトランスパイルします。
$ tsc
トランスパイル結果を見てみましょう。
var Greeter = /** @class */ (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
}());
var greeter = new Greeter("world");
console.log(greeter.greet());
classがfunctionでの表現に変わりました!
ではtsconfig.jsonのtargetを変えてみましょう。
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS"
}
}
$ tsc
class Greeter {
constructor(message) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
console.log(greeter.greet());
トランスパイルの結果がかわりました。
目的、実行環境に合わせて適切にtsconfigを設定してあげましょう!!
デフォルトの状態ではトランスパイルの結果のjsのコードはtsのコードと同じ場所に出力されます。
プロジェクトがある程度の規模になってきたりデプロイについてなど考えたりすると、jsをどこかのディレクトリにまとめたくなると思います。
tsconfig.jsonのoutDirではトランスパイルのjsの出力先を設定できます。
{
"compilerOptions": {
"target": "es5",
"module": "CommonJS",
"outDir": "out"
}
}
今回はoutという名前のディレクトリにjsを出力するように設定しました。
これでトランスパイルしてみましょう。
$ tsc
outというディレクトリにjsファイルがまとめて生成されたはずです。
ある程度プログラミングの経験がある方は、ブレークポイントなどを設置してデバッグをすることの有効性をよく知っていると思います。
どのdebuggerを使うのかは各個人に任せるとして、デバッグにはjsのソースと元のtscコードをマッピングするファイルが必要になります。
そのマッピングファイルを生成するにはtsconfig.jsonのsourceMapをtrueにします。
{
"compilerOptions": {
"target": "es3",
"module": "CommonJS",
"outDir": "out",
"sourceMap": true
}
}
これでコンパイルしてみましょう。
$ tsc
outディレクトリを確認すると、.js.mapというファイルが生成されているはずです。
デバッガーにはこのファイルが必要になるので、もしデバッガーが上手く動作しない場合はこの設定を確認してみましょう。
tscコマンドをファイルの入力なしで呼んだ場合、tscコマンドはまず現在のディレクトリからtsconfig.jsonファイルを探します。
現在のディレクトリに見つからない場合には、親ディレクトリを探し、なければ更に親ディレクトリを…
という様に見つかるまで再帰的に検索していきます。
tscコマンドに--project、または-pオプションでパスを指定すると、そのディレクトリのtsconfig.jsonを探しにいかせるか、そのパス自体がjsonのパスならそのファイル自体をTSConfigとすることができます。
テスト環境用と公開環境用でtsconfig.jsonを分けていた場合(例:/test/tsconfig.jsonと/prod/tsconfig.json)などにはこのオプションを使うと良いでしょう。
VSCodeではtsconfig.jsonを書いている時Ctrl + Spaceキーで設定値を予測させることができます。
非常に便利なので、書く時は使うことをオススメします!
TSConfigか〜
結構難しいよな〜あれ