SprocketsとYUI Compressorでassets fileをcompileするrake taskを作成した

PHPのアプリケーションで、javascriptファイルをコンパイルする必要があったのでSprocketsを使ったコンパイルタスクを作成したのでメモ。

今回は別の方法でYUI Compressorを使用してcompressしていたので、ruby-yui-compressorを使用した。
Gemfileには以下のように追加。

タスクは以下のようにnamespaceを作成して追加した。

files変数に対象となるjsファイルのパスのリストを作成した。
Sprocketsのload pathにはjs_assets_pathの値が設定されおり、Sprocketsはjsファイルのパスのリストにあるファイルをload path内を走査して取得してくる。

Sprockets::BundleAssetインスタンスとしてファイルは取得される。
このインスタンスをto_sすることでファイルの中身を得ることができる。今回は既存のファイル内のコメントを削除する必要があったので、正規表現でファイル内を走査して軒並み削除した。

また、Sprockets::BundleAssetインスタンスはlengthメソッドでbyteサイズ、mtimeメソッドで最終更新時刻、pathnameメソッドで絶対パスが得られる。

最後に元ファイルの情報をコメントで追加しておく必要もあったので、ファイル名と最終変更日を取得し、ヒアドキュメントでまずコメントを挿入してコードを追加した。

参考にしたページ: http://d.hatena.ne.jp/tashen/20120624/p1

Comments