JavaScript を縮小・圧縮したい!
PHP の勉強も兼ねて、
「JavaScript ファイルを自動的に縮小(Minify)して、(gzip)圧縮する」
というスクリプトを作っています──と何度も書いて来ましたが、
結論: \(^o^)/ 無理
という、残念な結果に終わりそうです(8 割方 予想が付いていたけど)。
今回は、それがなぜ難しいのか という話と、/packer/ は やっぱり凄い! という話です。
目標
やりたいこと:
- PHP4 で作る
- 自動で処理する
- JavaScript ファイルから
たったこれだけのことですが、じつは ものすごく難しいです。ちなみに、「PHP4」で、というのは、ただ単に ここのサーバで動いているのが PHP4 だから、というだけの理由です。PHP5 だと、類似のスクリプトはいくつかあるのですが……。
「そんなの、2 分でできるよ」というひと向けに、下記の(わざとらしい)"sample.js" をどうぞ。
/***/
/**
* comment
* // comment
*/
/*@cc_on
// http://d.hatena.ne.jp/amachang/20071010/1192012056
var doc = document; // comment
eval('var document = doc'); // comment
@*/
/*@cc_on document.write('"IE!"\n'); @*/ // comment
var hoge = "/* hoge */\n";
var fuga = '"/* fuga */"\n';
var foo = "//* foo *//\n";
var bar = '"\'//* bar *//\'"\n';
document.write(hoge + fuga + foo + bar);
上記のコードを Minify すると、こうなるはずです。──そんなスクリプト、書けますか?
/*@cc_on var doc=document;eval('var document = doc');@*//*@cc_on document.write('"IE!"\n');@*/var hoge="/* hoge */\n";var fuga='"/* fuga */"\n';var foo="//* foo *//\n";var bar='"\'//* bar *//\'"\n';document.write(hoge+fuga+foo+bar);
続きを読む