Documentation

You are viewing the documentation for the 2.0.8 release in the 2.0.x series of releases. The latest stable release series is 2.4.x.

§Google Closure Compiler を使う

Closure Compiler は、JavaScript のダウンロード・実行を高速化するためのツールです。Closure Compiler は、その名の通りコンパイラです。ただし、ソースコードを機械語へコンパイルするのではなく、JavaScript を良い JavaScript へコンパイルします。JavaScript コードはパース・分析され、不要なコードは削除され、必要に応じて書き換えられて、最終的には minify されます。

app/assets ディレクトリ以下の JavaScript は全て Google Closure Compiler によりパースされて、エラーや依存性のチェックがされます。さらに、ビルド設定で有効にされている場合は minify されます。

§JavaScript のサニティチェック

JavaScript コードは compile コマンドの実行時や、コードの変更時に自動的にコンパイルされます。他のコードのコンパイルエラー同様、JavaScript のコンパイルエラーもブラウザ上で確認できます。

§CommonJS スタイルの依存モジュール定義

Play に組み込まれた Closure Compiler は、CommonJS スタイルで記述された依存モジュールも解決してくれます。これは、RequireJS によく似ています。

例として、次のような lib.js ファイルがあるとします。

// The lib

function sum(a, b) {
    return a + b;
}
exports.sum = sum;

さらに、次のような test.js ファイルがあるとします。

// The test

require("lib");

function showSum(first, second) {
    alert(require("lib").sum(first, second));
}

showSum([2,3], 4);

コンパイル後、test.js の内容は以下のようになります。

require.register("lib", function(module, exports, require){ 
// The lib

function sum(a, b) {
    return a + b;
}
exports.sum = sum;

}

require("lib")

// The test

function showSum(first, second) {
    alert(require("lib").sum(first, second));
}

showSum([2,3], 4);

§縮小

.js.min.js に置き換えられた縮小版のファイルも生成されます。今回の例の場合、縮小版は test.min.js となっていることでしょう。通常のファイルの替わりに縮小版を使いたい場合は、HTML ファイルにて script の source 属性を変更する必要があります。

§エントリポイント

デフォルトでは、ファイル名の先頭にアンダースコアが付いていない JavaScript ファイルはすべてコンパイルされます。この振る舞い意は project/Build.scala にて javascriptEntryPoints キーを上書きすることで変更できます。このキーは PathFinder を保持しています。

例えば、 app/assets/javascripts/main ディレクトリの .js ファイルだけをコンパイルするには以下のようにします:

val main = PlayProject(appName, appVersion, mainLang = SCALA).settings(
   javascriptEntryPoints <<= baseDirectory(base =>
      base / "app" / "assets" / "javascripts" / "main" ** "*.js"
   )
)

デフォルトの定義は以下のとおりです:

javascriptEntryPoints <<= (sourceDirectory in Compile)(base =>
   ((base / "assets" ** "*.js") --- (base / "assets" ** "_*")).get
)