巨大化するWebサービス/アプリの開発現場で着実に市民権を得てきたTypeScript。C#生みの親Anders Hejlsberg老師が作ったとあって開発効率を爆上げしてくれる。非常に筋の良い言語だ。
今回はTypeScriptへJavaScriptソースをインポートし、webpackを使って1ファイルにビルドする方法についてangularプロジェクトを例に取って解説する。「npmとかbowerで落としてきたJavaScriptってTypeScriptからどう使うの〜?」てな事を解決しよう。
Contents [hide]
さくっと分かる(?)ビルド方法
これからつらつらと設定やインポート方法の解説が続くけれど、やりたいことはシンプル。要はTypeScriptでJavaScriptをインポートする命令を書き、それをビルドして1ファイルにする設定をするだけ。それでは詳しく見ていこう。
詳しいビルド方法
プロジェクト構成
まずは今回の記事で使うプロジェクトの構成をご紹介。
src/ts/app.tsで書いたTypeScriptソースをdst/js/app.jsへ出力する。
今回はapp.tsからangular.jsを読み込むことを想定して、node_modules以下のJavaScriptソース(angular.js)をTypeScriptへインポートする。ココらへんはBowerを使っているならbower_components以下から読んだりしてもいい。プロジェクトの要件に応じて柔軟に。
tsconfig.jsonとwebpack.config.jsについて詳しくは後述。
npm
お次はnpmで必要なパッケージをインストールする。
typescriptは言わずもがな。webpackはTypeScriptとJavaScriptを一つにまとめて1ファイルへビルドするために使う。(ts-loaderはTypeScriptをwebpackでビルドするため)
インポートする対象(angular)もインストールする。
webpack
パッケージのインストールが終わったら、お次はwebpackの設定へ進もう。webpackのビルド設定はwebpack.config.jsonで行う。
何の事はない普通のビルド設定だけれど、ポイントはresolve.aliasにangularを設定しているところ。こうすると、外部ソース(今回だとangular.js)をインポートする度にパスを書かなくてよくなる。実際の開発現場ではあっちこっちにインポート文を書くことになるからここの設定が生きてくる。
tsconfig.json
TypeScriptのコンパイル設定をtsconfig.jsonへ書く。このとおり。
今回はインポート方法にフォーカスするために最低限の設定としている。実際の開発現場ではソースマップの設定など必要に応じて書き殴ろう。
TypeScriptへJavaScriptソースをインポートする
やれやれ。設定はここまで。いよいよJavaScriptのインポート方法を紹介する。
angular.jsのインポートは import “angular”; と書くだけ。webpack.config.jsで先述したとおり、ここで指定した “angular” はangular.jsへのパスの代わりとして使っている。
ビルドして使う
ここまで終われば $ webpack を叩いてTypeScript + JavaScript(angular.js)をビルドしよう。dst/js/app.jsにangularと一緒くたにTypeScriptソースがビルドされているから、index.htmlからはapp.jsを読むだけでいい。(index.htmlでangular.jsを読み込まなくてもいい)。
プロジェクトによってはあえてJavaScriptソースをhtmlなどから別口で読み込みたいことも考えられる。そんな時はwebpackプラグインHtml Webpack Pluginを使おう。
番外 TypeScript + Babel on webpackでES5にする方法
プロジェクトによりけりだけれど、ソースをES5互換にしたいことがある。そんなときは僕らのBabelがパパッとやってくれる。webpackからBabelを使い、ビルドプロセスにES5変換を組み込もう。
まずは必要なパッケージをインストールする。
プロジェクトルートに .babelrc なるBabelの設定ファイルを作る。
最後はBabelを使うためのwebpackの設定。ポイントはmodule.loaders.loadersの中身。 “babel” と “ts” を指定しており、右から順にビルドプロセスで使われる。
※ “-loader” は省略しても大丈夫。
ここまで出来たら $ webpack を実行しよう。無事にES5ソースが出力されるだろう。