JavaScript::Minifierで

.cssとか.jsの.gzファイルを作るときに、せっかくだから.jsファイルを小さくしようと思って、調べてみたらCPANJavaScript::Minifierというのがあったので、これを使わせてもらった。シェルスクリプトの書き方もあまり知らんので調べながら...。

for name in ../js/*.js
do
    echo $name
    cat $name \
    | perl -e 'use JavaScript::Minifier minify;minify(input=>*STDIN, outfile=>*STDOUT);' \
    | gzip -c > $name.gz
done

perlの-Mオプションでモジュールを指定するとかっこいいのかもしれないけど、エクスポートの仕方がわからんかったので、use って書いた。自分で書いていた.jsファイルは問題なく処理されたけど、jQueryのtablesorterプラグインでエラーがー。

../js/jquery.tablesorter.js
unterminated double quoted string literal, stopped at /opt/local/lib/perl5/site_perl/5.8.9/JavaScript/Minifier.pm line 151.
../js/jquery.tablesorter.min.js
unterminated double quoted string literal, stopped at /opt/local/lib/perl5/site_perl/5.8.9/JavaScript/Minifier.pm line 151.

出力されたファイル自体は問題なさげだった。(できるところまでやって、あとは元のファイルのままのようだった)
もともとminifyされた min.js があるので、さらにminifyする必要はないんだけど、除外するのもめんどくさい...。
除外する方法はこんな感じに書いた。

for name in ../js/*.js
do
  case $name in
    *jquery* ) echo "除外だな" ;;
    * ) echo "ここでやる" ;;
  esac
done

実際やってみると minify するのとしないのとでは .gz の状態でも 3KB から 2KB になったり(元ファイル8KBくらいで)で、わりと差がでますな...。