Posted by & filed under いろいろ.


デバッグ用として開発コードにconsole.logを埋め込み、消し忘れたままコミット、IEでスクリプトエラーが発生して動かなくなりました
なんて経験ありませんか?
例えばClosure Compilerでリリースビルドから自動的にconsole.logを消してくれればそんなことなくなります。

まず前提知識として、Closure Compilerはコンパイル時の流れはこんな感じです。

  1. Rhinoでパース
  2. Rhinoが生成したabstract syntax tree(AST)に対してエラーチェックや最適化

ASTに対する操作をpassと呼んでいて、自作のpassを追加できるオプションがあります。
こちらの本に詳細が載っています。

build.xmlとMyCommandLineRunner.javaは上記Closure本の丸パクリなので添付のソースを見てください。
まあこのConsoleRemoval.javaもClosureCodeRemoval.java(goog.asserts.assertとかを消すpass)のパクリなのですが。

http://dev.ariel-networks.com/wp/wp-content/uploads/2011/08/compiler.zip

test.js

をコンパイルすると

(4)で誤作動していますが、まあ実用範囲内でしょう。
optimize後であれば引数名が短縮されているので誤作動しなくなるかもしれませんが、ADVANCEDモードのときにconsole.traceとかは短縮されてしまうので消せなくなるんじゃないかと思います。(gecko_dom.js,webkit_dom.js)

ここではCommandLineRunnerを拡張しましたが、ビルドにantを使っているのであればCompileTaskを拡張してもよいでしょう。
ただCompileTaskはfinal classなので継承できませんが。

本題とは関係ないのですが、先日ブラウザー勉強会に参加しました。
興味深いお話を聞けて刺激になりました。
関係者の方スピーカーの方たちへお礼申し上げます。

あっ、あとO’ReillyのTwisted本の表紙はクサリヘビっぽい気がします。


関連文書:

  • 関連文書は見つからんがな

Comments are closed.