这些javascript minifiers中的任何一个都删除了调试语句吗?

时间:2011-08-01 22:20:14

标签: javascript jquery

如果我可以将调试/控制台日志语句放在我的javascript中,然后让js minifier / compacter在编译时删除它们,那就太好了。

这是否存在?

3 个答案:

答案 0 :(得分:4)

不是我知道的,虽然谷歌的Closure Compiler会让你在你想要的时候完成类似的事情:

/** @define {boolean} */
var DEBUG_MODE = true;

var debug;
if (DEBUG_MODE) {
    /** @param {...} args */
    debug = function(args) { console.log.apply(console, arguments); }
} else {
    /** @param {...} args */
    debug = function(args) {}
}

debug('foo', {a: 5});

如果将DEBUG_MODE设置为false(如果愿意,您甚至可以在命令行中执行此操作),那么当启用高级优化时(如果要使用,则必须执行一些操作)这些,但它们很方便),将使用debug的空实现,这将导致调用它“内联”(优化不存在)。

您可以将其扩展为具有比上述更复杂的调试功能(仅转发到console.log);例如,您可以创建一个接受在调试模式下调用的函数参数的函数,而不是在调试模式之外调用。

答案 1 :(得分:0)

没有一个主要的minifiers实现它,我认为它是因为它不是任何标准的一部分(例如它们在Internet Explorer中未定义)。他们希望您可能已声明自己的debug / javascript函数。

答案 2 :(得分:0)

在Perl中JavaScript::Minifier

#!/usr/bin/perl -w
use strict;
use JavaScript::Minifier qw(minify);

open(INFILE, $ARGV[0]) or die;
open(OUTFILE, ">$ARGV[1]") or die;
my $minJs =  minify(input => *INFILE,  stripDebug => 1);
$minJs =~ s#console.log\(.*\);##g;
$minJs =~ s#alert\(.*\);##g;
print OUTFILE $minJs;
close(INFILE);
close(OUTFILE); 

示例用法:./jsMinifier.pl js.js js-min.js