Minify
Minify.js は、node.js 上で動作する Minifier です。
WebModule/clone コマンドで生成した package.json を読み込み、JavaScript で書かれたソースコードを Closure Compiler でコンパイルします。
以下のリンクも参照してください。
node bin/Minify.js 引数...
でコードの結合と Minify を行います。
node bin/Minify.js [@label]
[--help]
[--verbose]
[--nowrap]
[--nocompile]
[--header file]
[--footer file]
[--keep]
[--simple]
[--es5in]
[--es6in]
[--es5out]
[--es6out]
[--strict]
[--pretty]
[--option 'compile-option']
[--extern file]
[--output file]
[--source file]
[--label @label]
[--release]
パラメタ | 機能 |
---|---|
@label | --label @label と同じ効果があります。 先頭の@は省略できません |
--help | ヘルプを表示します |
--verbose | verbose mode にします |
--nowrap | コンパイル後のファイルを WebModule idiom でラップしません。 デフォルトはラップします |
--nocompile | Closure Compiler によるコンパイルを行いません。 ファイルの結合とプリプロセスを行い、結果をファイルに保存します |
--header file | ヘッダファイルを指定します。 結合したファイルの先頭にファイルの内容が埋め込まれます |
--footer file | フッタファイルを指定します。 結合したファイルの末尾にファイルの内容が埋め込まれます |
--keep | 作業中に生成する中間ファイル(release/.Minify.tmp.js)を消さずに残します。 コンパイルエラーの特定に利用できます。あらかじめreleaseディレクトリを用意する必要があります。 |
--simple |
Closure Compiler の SIMPLE_OPTIMIZATIONS モードでビルドします。 デフォルトは ADVANCED_OPTIMIZATIONS モードでコンパイルします |
--es5in (*) | ES5 で書かれたコードを読み込みコンパイルします |
--es6in (*) | ES6 で書かれたコードを読み込みコンパイルします |
--es5out (*) | コンパイルした結果を ES5 のコードとして出力します |
--es6out (*) | コンパイルした結果を ES6 のコードとして出力します |
--strict | コンパイルしたコードの先頭に 'use strict'; を追加します |
--pretty | ビルド結果を人間が見やすい形で出力します |
--option 'compile-option' | コンパイルオプションを指定します。複数指定可能です |
--extern file | リネームを禁止する識別子の一覧が記載されているファイルを指定します。 複数指定可能です |
--output file | 出力先のファイルを指定します。 既に出力先のファイルが存在する場合は上書きします。 省略した場合は x-build.output で指定したファイルに出力します |
--source file | ビルド対象に追加するファイルを指定します。 複数指定可能です。 |
--label @label |
プリプロセスで処理するラベルを指定します。 複数指定可能です 先頭の @は省略可能です |
--module |
--release の別名です。[deprecated] |
--release | リリース用に依存関係を解決した状態でビルドし、 ファイル単体で動作するコードを出力します。 --release オプションを指定しない場合は、単体テスト用のビルドを行います |
(*) --es5in, --es6in, --es5out, --es6out は Closure Compiler v20140923 ではまだ機能しません。
--label
オプションで プリプロセスで処理する @label を指定します。
node bin/Minify.js --label @label1 --label @label2 --label @label3
と、
node bin/Minify.js @label1 @label2 @label3
は同じ結果になります(--label
を省略できます)。
デフォルトは --label @dev --label @debug --label @assert
です。
--label
オプションを指定しない場合でも、@dev, @debug, @assert ラベルで囲まれたコードブロックはプリプロセスフェーズでソースコードから削除されます。
// 以下の {@dev ... }@dev で囲まれたコードブロックがコンパイル時に削除されます
//{@dev
Foo["repository"] = "https://github.com/uupaa/Foo.js";
//}@dev
コンパイル後のファイルを WebModule idiom でラップしません。
デフォルトでは、以下のようにラップします
(function(global) { // 上下を WebModule idiom でラップします
// ここにコンパイルしたソースコードが入ります。
})((this || 0).self || global) // 上下を WebModule idiom でラップします
--option コンパイルオプション
を指定すると、コンパイル時の動作を指定できます。
-
人間が見やすい形にフォーマットを整えます(
--pretty
オプションと同じ結果になります)$ node bin/Minify.js --option 'formatting pretty_print'
-
AMD や CommonJS で書かれたモジュールも展開した状態でコンパイルが可能です
$ node bin/Minify.js --option 'transform_amd_modules' --option 'process_common_js_modules' --option 'common_js_entry_module=Foo.js/lib/Foo.js' --option 'common_js_module_path_prefix=Foo' --output ./lib/Foo.min.js
-
ソースマップの出力が可能です
$ node bin/Minify.js --option 'create_source_map file'
リリースビルドを行うオプションです。
依存関係を解決したうえでビルドします。単体で動作するファイルを生成します。
$ node bin/Minify.js --release --output a.js
x-build
を参照してください。
--extern file
オプションを使うと、リネームされたくない識別子やプロパティを保護できます。
以下のような Closure Compilerが理解できるフォーマットのファイルを用意し、 --extern ファイル名
で指定します。
var Task;
Task.name;
Task.repository;
Task.prototype.push = function(value) {};
Task.prototype.set = function(key, value) {};
Task.prototype.done = function(err) {};
Task.prototype.pass = function() {};
Task prototype.miss = function() {};
Task.prototype.exit = function() {};
Task.prototype.buffer = function() {};
Task.prototype.extend = function(count) {};
Task.prototype.message = function(msg) {};
Task.prototype.missable = function(count) {};
Task.prototype.isFinished = function() {};
Task.dump = function(filter) {};
Task.drop = function() {};
Task.flatten = function(source) {};
Task.arraynize = function(source) {};
Task.objectize = function(source) {};
Task.run = function(taskRoute, taskMap, callback, options) {};
関数/メソッドの引数は省略可能です(気になる方は付けてもよいです)。
こちらも参考にしてください
- http://closure-compiler.appspot.com/home - Closure Compiler Service
- http://www37.atwiki.jp/aias-closurecompiler/ - Closure Compilerを使う
- http://developer.cybozu.co.jp/tech/?p=502 JavaScriptをClosure CompilerのADVANCEDモードに完全対応させるその方法