TypeScriptのコンパイルに node も Visual Studio も必要ない(Windowsでは)
この内容は TypeScript 0.8.2 をもとに記述しています。
TypeScriptをコンパイルするための環境を作るのに Windows 環境でかつ Visual Studio を利用されている型は TypeScript for Visual Studio 2012 をインストールするか、またはそれ以外の環境では node をインストールして npm から typescript を取ってくる(npm install -g typescript)かします。
今回は実はその両方とも必要ないってお話です。メモ帳とIEさえあれば git も node も Visual Studio もいらないってお話です。但し Windows 限定。
TypeScript のコンパイラは JavaScript で書かれているってのはそこらへんに書かれてる話ですが、じゃ、その JavaScript の実行環境は何を利用されているかっていうと、node は有名どころとして、実は WSH も実行環境として動作するように構築されています。
tsc.js という、 tsc コマンドの実装部分のファイルの 25084 行目あたりを確認すると以下のようになっています。
if(typeof ActiveXObject === "function") { return getWindowsScriptHostIO(); } else { if(typeof require === "function") { return getNodeIO(); } else { return null; } }
ActiveXObject があると getWindowsScriptHostIO 関数を呼んでます。つまり、WSH を利用する IO 処理です。
ということで、コマンドラインから cscript でこの tsc.js を呼んでやると、 typeof ActiveXObject === "function" が true になって、 WSH を利用する IO が利用されます。
ということで、バッチファイルを作ってみましょう。
まずはブラウザで TypeScript のリポジトリを開いて、左のツリーから [bin] - [tsc.js] を選択します。以下のような感じ。
で、右ペインに表示されている tsc.js のコードをコピーして、ローカルのファイルとして保存します。ファイル名はもちろん tsc.js ですね。
次にブラウザで tsc.js と同じ階層にある、 lib.d.ts も同じようにコードをコピーして、ローカルにファイルとして保存します。もちろん tsc.js と同じディレクトリです。
で、同じディレクトリにバッチファイルを作ります。ここでは tscw.cmd としておきます。中は以下の一行で。
cscript "%~dp0\tsc.js" %*
あとは、このディレクトリに Path を通して、作った tscw.cmd がどこからでも叩けるようにしておきましょう。tscw をコマンドラインから叩いたスクリーンショットを載せておきます。
node や TypeScript for Visual Studio 2012 のインストールが難しい方はご利用ください。
ちなみに TypeScript for Visual Studio 2012 で入る tsc.exe も内部的には WSH を利用して動かしてるみたいです。 tsc.exe と同じフォルダにある tsc.js の先に書いた JavaScript の判定部分を以下のようにして、 tsc.exe を実行すると見事に ActiveX のほうのコードが通っていることを確認できると思います。
if(typeof ActiveXObject === "function") { // 以下追加 WScript.StdOut.Write("ActiveX"); return getWindowsScriptHostIO(); } else { if(typeof require === "function") { //以下追加 console.log("node"); return getNodeIO(); } else { return null; } }