Closure Compiler で 複数ファイル を コンパイル する方法

0 件のコメント

Google closure tools に含まれる closure compiler の使い方です。 closure library に含まれる closurebuilder.py を利用して、 複数の JavaScript ファイル を 1つの JavaScript ファイル へ バッチ処理で コンパイル します。 ここでは、バッチ処理する前提となる「フォルダ構成」と「コンパイルバッチ」を記載します。

(※Windows で、JavaランタイムPython が インストール 済み の環境を前提とします。)

フォルダ構成

 ROOT
├  lib
│ ├  closure-compiler
│ │ └  compiler.jar … コンパイラ本体
│ └  closure-library
│    └  closure
│       ├  bin
│       │ ├  build
│       │ │ └  closurebuilder.py … コンパイルで利用
│       │ ├  calcdeps.py
│       │ └  scopify.py
│       ├  css
│       └  goog
│          └  closure library の ソースコード
├  src
│ └  ソースコード … 自分が作成したソースコードの保存場所
└  build.bat … ビルドを実行するバッチファイル

build.bat

@echo off

rem 実行ディレクトリをバッチファイルの場所へ移動。
cd /d "%~dp0"


rem 環境変数に Java と Python へのパスを追加。
set PATH=%PATH%;C:\Program Files\Java\jre7\bin
set PATH=%PATH%;C:\Python27


rem 各種変数を設定。
set CLOSUREBUILDERPY=.\lib\closure-library\closure\bin\build\closurebuilder.py
set CLOSURECOMPILERJAR=.\lib\closure-compiler\compiler.jar
set CLOSURE_LIBRARY_DIR=.\lib\closure-library\closure\goog
set CLOSERU_LIBRARY_THIRD_DIR=.\lib\closure-library\third_party\closure\goog
set SOURCE_CODE_DIR=.\src
set MAIN_CLASS_NAME=garafu.test
set OUTPUT_FILE=.\build\garafu.test.min.js


rem コンパイルの実行。
%CLOSUREBUILDERPY% ^
    --root=%CLOSURE_LIBRARY_DIR% ^
    --root=%CLOSERU_LIBRARY_THIRD_DIR% ^
    --root=%SOURCE_CODE_DIR% ^
    --namespace=%MAIN_CLASS_NAME% ^
    --output_mode=compiled ^
    --compiler_jar=%CLOSURECOMPILERJAR% ^
    --compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS" ^
    --compiler_flags="--js_output_file=%OUTPUT_FILE%"

「各種編集の設定」(12 - 19 行)では build.bat からの相対パスを指定します。 フォルダ構成が上記と異なる場合、この部分を変更することになります。

%CLOSERU_LIBRARY_THIRD_DIR%
設定を行わないと場合により、次のようなエラーが発生します。 closure compiler は不要なファイル、コードを削ってくれるので、余分に見えても追加しておきます。 (不要なファイル、コードを削るのは ADVANCED_OPTIMIZATIONS に限りますが。。)

depstree.NamespaceNotFoundError: Namespace "goog.async.Deferred" never provided. Required in Source [JavaScript ファイル への パス]

%MAIN_CLASS_NAME%
最初に実行するクラス名を指定します。 基本的に、ここで指定するクラスは singleton で、 goog.addSingletonGetter([クラス名]); および [クラス名].getInstance(); の実装があるクラスを指定します。 この部分は作成しているプロジェクト環境に合わせて変更します。

%OUTPUT_FILE%
出力先のフォルダ、ファイル名を指定します。 ここでは、 build フォルダ以下にファイルを作成するようにしています。 この部分は作成しているプロジェクト環境に合わせて変更します。

今回、参考にしたサイトは以下の通りです。