Ответ 1
В последнем uglify-js (v2.4.3) добавлена новая опция сжатия 'pure_funcs'. Если я добавлю функции console.log в этот массив, он будет удален в файле minified js. Ниже приведен пример тестового кода. Это именно то, что я хочу.
// file: m.js
var uglify = require('uglify-js');
var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data" + name());';
var minifiedCode = uglify.minify(originalSourceCode, {
fromString : true,
mangle: {},
warnings: true,
compress:{
pure_funcs: [ 'console.log' ]
}
});
console.log(minifiedCode);
$node m.js
WARN: Dropping side-effect-free statement [?:1,53]
{ code: 'var name=function(){var n="test";return n};',
map: 'null' }
Цитаты из https://github.com/mishoo/UglifyJS2
pure_funcs - значение по умолчанию null. Вы можете передать массив имен, и UglifyJS будет считать, что эти функции не создают побочных эффектов. ОПАСНО: не проверяет, переопределено ли имя в области. Пример здесь, например, var q = Math.floor(a/b). Если переменная q не используемый в других местах, UglifyJS отбросит его, но все равно сохранит Math.floor(a/b), не зная, что он делает. Вы можете передать pure_funcs: [ 'Math.floor'], чтобы сообщить, что эта функция не будет производить никаких побочный эффект, и в этом случае вся заявка будет отброшена. Текущая реализация добавляет некоторые накладные расходы (сжатие будет медленнее).