UglifyJS2でコードを削減する方法を調べつつ試したのでいくつかメモ。当然ながらgrunt-contrib-uglifyでも同様の事ができる。
-c, --compress
index.js
var a = (true) ? 1 : 2;
$ uglifyjs index.js -c -o index.min.js
index.min.js
var a=1;
--compress
を付けて分岐が常に片方しか実行されないようなコードを書くと、実行されない箇所のコードは削除される。
pure_funcs
index.js
(function(global) {
var _ = global._;
function require_() {
_ = require('lodash');
}
require_();
function log_() {
console.log('log');
}
log_();
_.noop();
}(this));
$ uglifyjs index.js -b -c 'pure_funcs=["require_", "log_"]' -o index.min.js
index.min.js
!function(global) {
var _ = global._;
_.noop();
}(this);
--compress
のあとにpure_funcs
を指定すると、指定された関数が削除される。
-d, --define
index.js
if (typeof __DEBUG__ !== 'undefined') {
console.log('__DEBUG__');
}
if (__DEBUG__) {
console.log('__DEBUG__');
}
console.log('Hello, World!');
$ uglifyjs index.js -c -d '__DEBUG__ = void 0' -o index.min.js
index.min.js
console.log("Hello, World!");
--define
で変数を宣言できる。--compress
が同時に指定されていると実行されない箇所のコードが削除される。
grunt-contrib-uglify
grunt-contrib-uglifyで指定する場合の設定など。load-grunt-configを使った場合のコードなのでいい感じになんとか。
uglify.coffee
module.exports =
main:
files:
'index.min.js': [
'index.js'
]
options:
compress:
pure_funcs: [
'require_'
]
global_defs:
__DEBUG__: undefined