Documentation

You are viewing the documentation for the 2.0.x release series. 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
)

このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。