Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2011-10-08

Google Closure Library の一部分だけを単一ファイルにしたい

03:13

そういうときにどうしたらいいかを調べるだけでも一苦労。情報が少なすぎるのが closure の難点。

必要なもの: python, svn

svn は使わないでもいいけど、ちまちま必要なファイルをダウンロードするよりは全部一気にやってしまったほうがいいと思う。

まず、svn で closure をダウンロードしてくる。けっこう時間がかかる。

svn checkout http://closure-library.googlecode.com/svn/trunk/ closure-library

本当に必要なのは

  • closure-library/
    • closure/
      • bin/
        • build/
          • この中身

と、

  • closure-library/
    • closure/
      • goog/
        • base.js
        • deps.js
        • その他自分が使いたいやつ

だけのはず。(たぶん)

次に、まっさらなディレクトリを作る。ClosureBuilder (後述)でビルドするときに、ディレクトリの中の全ファイル(?)を見るみたいなので、余計なのが入ってると変なエラーが出たりするから。

この中に、こういうファイルを作って、名前は tmp.js とでもする。

goog.provide('closure-vec');

goog.require('goog.vec.Vec3');
goog.require('goog.vec.Mat4');

Vec3 = goog.vec.Vec3;
Mat4 = goog.vec.Mat4;

provide のところは何でもいい。最後の2行は、goog.vec とかいちいち書きたくなかったので付けた。

ここで、ClosureBuilder を使う。自分は $HOME/local/closure-library にダウンロードしたけど、その部分は置き換えてください。

python ~/local/closure-library/closure/bin/build/closurebuilder.py --root=$HOME/local/closure-library --root=. -n closure-vec -o script --output_file=closure-vec.js

--root が2つあるのは、一つは closure-library のトップを指定して、もう一つは tmp.js ファイルがあるディレクトリを指定。

-n は、さっき goog.provide した名前。ClosureBuilder が勝手にディレクトリ内の全ファイルをスキャンして goog.provide を見つけてくれる。

-o script はタイプを書くらしい。よくわからないけど script でいいらしい。

--output_file は出来上がるファイル名。

そうすると、このディレクトリ内に tmp.js とは別に closure-vec.js ができてて、中身は非圧縮の base.js とその他指定したライブラリが連結され、最後に自分が書いた tmp.js の中身が入ってる状態になってる。

tmp.js は捨てて closure-vec.js を HTML から読み込めばいい。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20111008
 |