glify-js を使用してソースコードを縮小しています。元のソースコードのconsole.logステートメントを削除したい。出来ますか?または、これをサポートする他の圧縮ツールはありますか?
Node.jsで以下のコードを使用します。
var uglify = require('uglify-js');
var originalSourceCode = 'var name = function(){var str = "test"; return str}; console.log("log data");';
var minifiedCode = uglify.minify(originalSourceCode, {
fromString : true,
mangle: {},
warnings: true
});
console.log(minifiedCode);
出力は次のとおりです。
$node m.js
{ code: 'var name=function(){var a="test";return a};console.log("log data");',
map: 'null' }
縮小されたコードでは、console.logは削除されません。
最新のuglify-js(v2.4.3)では、新しい圧縮オプション「pure_funcs」が追加されています。 console.log関数をこの配列に追加すると、縮小された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-デフォルトのヌル。名前の配列を渡すことができ、UglifyJSはそれらの関数が副作用を引き起こさないと想定します。危険:名前がスコープ内で再定義されているかどうかをチェックしません。ここでの例は、たとえばvar q = Math.floor(a/b)です。変数qが他の場所で使用されていない場合、UglifyJSはそれをドロップしますが、それが何をするかを知らずに、Math.floor(a/b)を保持します。 pure_funcs:['Math.floor']を渡すと、この関数が副作用を引き起こさないことを通知できます。この場合、ステートメント全体が破棄されます。現在の実装ではオーバーヘッドが追加されます(圧縮は遅くなります)。
また、最近追加されたdrop_consoleという別のオプションもあります(2013年後半)
drop_console -- default false. Pass true to discard calls to console.* functions
これは、次のようにgrunt init構成に追加されます。
grunt.initConfig({
uglify: {
options: {
compress: {
drop_console: true // <-
}
},
my_target: {
files: {
'dest/output.min.js': ['src/input.js']
}
}
}
});
Groundskeeper を使用してこれを行うことができますが、別の手順になります。
-cオプションの場合、drop_consoleをtrueに設定:uglifyjs app.js -m -c drop_console=true -o app.min.js
Gulpを使用している場合は、「gulp-strip-debug」を使用して、コンソール、アラート、およびデバッガーを削除します。 https://www.npmjs.com/package/gulp-strip-debug