Skip to content
uupaa edited this page Jul 12, 2016 · 29 revisions

Minify.js は、node.js 上で動作する Minifier です。

WebModule/clone コマンドで生成した package.json を読み込み、JavaScript で書かれたソースコードを Closure Compiler でコンパイルします。

以下のリンクも参照してください。

Usage

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 オプションで プリプロセスで処理する @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

--nowrap

コンパイル後のファイルを WebModule idiom でラップしません。

デフォルトでは、以下のようにラップします

(function(global) { // 上下を WebModule idiom でラップします

// ここにコンパイルしたソースコードが入ります。

})((this || 0).self || global) // 上下を WebModule idiom でラップします

--option

--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'

--release

リリースビルドを行うオプションです。

依存関係を解決したうえでビルドします。単体で動作するファイルを生成します。

$ node bin/Minify.js --release --output a.js

x-build を参照してください。

--extern

--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) {};

関数/メソッドの引数は省略可能です(気になる方は付けてもよいです)。

参考情報

こちらも参考にしてください