tsc で out オプションを付けても階層維持されてた。

この内容は TypeScript 0.9.0-1 をもとに記述しています。

いつのまにか、いつからか tsc で out オプションにディレクトリを指定しても、フラットに展開されずに、階層をいい感じに維持したまま出力してくれるようになってました。ということで、この間書いたのはウソでした。

ということで、実験。以下のような構成で ts ファイルがあったとします。

├ build
└ src
  └ core
  │ └ base.ts
  └ ui
    └ control.ts

で、以下のような tsc コマンドを蹴ったとします。

tsc src/**/*.ts --out build

とすると、こんな感じで出力されます。( src 以下は省略)

├ build
│ └ core
│ │ └ base.js
│ └ ui
│   └ control.js
└ src

しっかり、階層が維持されてます。で、もうちょっと実験。

├ build
└ src
│ └ core
│ │ └ base.ts
│ └ ui
│   └ control.ts
└ src2
  └ ext
    └ ext.ts

で、こう。

tsc src/**/*.ts src2/**/*.ts --out build

そしたら、こうなった。

├ build
│ ├ src
│ │ └ core
│ │ │ └ base.js
│ │ └ ui
│ │   └ control.js
│ └ src2
│   └ ext
│     └ ext.js
└ src
└ src2

どうやら、すべてのファイルから親フォルダをたどって同じフォルダの下のフォルダから構成される模様です。
一つ目と二つ目のオプションの違いって、src2/**/*.ts が増えただけなんですが、それで出力される構成が変わるってのはちょいと微妙な気もしないでもないですね。まぁ、でもこうなるのも分からんでもないし、じゃ、どうすればいいのよってもの思い浮かばんのですが。

最後に親ディレクトリを指してみた場合どうなるのか試してみました。

├ dir
│ ├ build
│ └ src
│ │ └ core
│ │ │ └ base.ts
│ │ └ ui
│ │   └ control.ts
│ └ src2
│   └ ext
│     └ ext.ts
└ src3
  └ other.ts

いままでと同様に以下のような tsc コマンドを投げてみます。ちなみにカレントディレクトリは dir です。

tsc src/**/*.ts src2/**/*.ts ../src3/*.ts --out build

予想通り以下のようになりました。

├ dir
│ ├ build
│ │ └ dir
│ │ │ ├ src
│ │ │ │ └ core
│ │ │ │ │ └ base.js
│ │ │ │ └ ui
│ │ │ │   └ control.js
│ │ │ └ src2
│ │ │   └ ext
│ │ │     └ ext.js
│ │ └ src3
│ │   └ other.js
│ └ src
│ └ src2
└ src3