如果我可以将调试/控制台日志语句放在我的javascript中,然后让js minifier / compacter在编译时删除它们,那就太好了。
这是否存在?
答案 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