grunt-angular-templatesを使ってみた
AngularJSのElement Directiveを使っていて
AngularJSのElement Directiveは便利でHTMLも綺麗になるので好きなんですが、テンプレートをDirectiveの中に書くのだけ好きになれません。
JavaScriptファイル内に文字列として書くためエディタのカラーリングも効かず、書くにくいのが嫌でした。
もちろんtemplateの代わりにtemplateUrlで外部HTMLを使うこともできますが、別途AJAXしてしまうので無駄にファイルのリクエスト数が増えてしまうのも好ましくありません。
よく使うテンプレートたちは外部HTMLで書いておいて、リクエスト数は抑えたい。
それの1つの解決方法として、今回はgrunt-angular-templatesを使いました。
grunt-angular-templatesとは
grunt-angular-templatesは、Eric Clemmons氏のGruntプラグインで、指定したHTMLファイル郡をミニファイ・結合して1つのJavaScriptファイルとして出力してくれます。
そのJavaScriptファイルには、指定したHTMLファイルを$templateCache.putするように記述してあるので、後はそのURLをtemplateUrlで指定すると別途AJAXすることなくキャッシュしたデータを使用してくれます。
インストール
インストールはnpm。
そしてGruntfile.jsでロードを有効化。
設定
まずは一番シンプルな形を試します。 AngularJSのテンプレートとして書いたHTMLファイル全てを $templateCacheにキャッシュさせるJavaScriptを出力させます。
Gruntfile.jsで以下の最低限のオプションだけ記述します。
"myApp"はテンプレートを使うモジュール名に合わせます。
実行
実行します。
もし下記のような名前のHTMLファイルを入れていれば
js/templates.jsには以下のようなコードが出力されます。
あとはこのjs/templates.jsを
と読み込めば、btnLike.htmlとbtnFollow.htmlの内容は読み込まれてキャッシュされるので、 使うときは$routeProviderやDirectiveのtemplateUrlで
という感じで使うか、またはHTMLに直接
とngIncludeで指定して使うことができます。
その他オプションを試してみる
もしテンプレートが置いてあるパスと実際にアプリ内で指定するURLが違う場合は、 cwdオプションを使って下記のようにカレントディレクトリを別途指定します。
また、テンプレート用JSに変換する際にhtmlminを利用することができるので、
オプションでhtmlminを指定して出力時のファイルサイズを最適化できました。
grunt-angular-templatesのおかげでテンプレートの外部HTML化が実現し、リクエスト数を抑えることもできました。
grunt-angular-templates https://github.com/ericclemmons/grunt-angular-templates