§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
)