在压缩过程中排除调试JavaScript代码

47
我正在探索不同的方法来压缩我的JavaScript代码,包括常规的JSMin, Packer和YUI解决方案。我对新的Google Closure Compiler非常感兴趣,因为它看起来异常强大。
我注意到Dean Edwards packer具有一项功能,可以排除以三个分号开头的代码行。这很方便,可以排除调试代码。例如:
;;;     console.log("Starting process");

我正在清理我的代码库,想要添加像这样的提示以轻松排除调试代码。为此,我想弄清楚这是否是最佳解决方案,或者是否有其他技术可用。
因为我还没有选择如何缩小代码,所以我希望以与我最终选择的缩小器兼容的方式来清理代码。所以我的问题是:
1. 使用分号是一种标准技术吗?还有其他方法吗? 2. Packer是唯一提供此功能的解决方案吗? 3. 其他解决方案是否也可以适应这种方式工作,还是它们有实现此目的的替代方法? 4. 我可能会开始使用Closure Compiler。现在有什么我应该做的来为此做好准备吗?
12个回答

0

我迄今没有研究缩小代码,但可以使用一个简单的正则表达式来实现这种行为:

s/;;;.*//g

这将在三个分号之后(包括分号)替换掉一行中的所有内容,因此在缩小之前被丢弃。您可以在运行缩小工具之前运行sed(或类似工具),如下所示:

sed 's/;;;.*//g' < infile.js > outfile.js

顺便说一句,如果你想知道压缩版本或缩小版本哪个更好,请阅读JavaScript压缩方法的比较


0

我正在寻找一个内置选项来完成这个任务。目前我还没有找到,但是我的最喜欢的答案也不需要对现有源代码进行任何更改。以下是基本用法的示例。

假设有一个名为test.html的HTML文件:

<html>
        <script src="hallo.js"></script>
</html>

使用 hallo.js 和:

sayhi();
function sayhi()
{
        console.log("hallo, world!");
}

我们将使用一个单独的文件,比如说noconsole.js,其中包含了来自链接答案的内容。
console.log = console.debug = console.info = function(){};

然后我们可以按照以下顺序编译它,记住顺序很重要,noconsole.js必须放在参数的第一位:

google-closure-compiler --js noconsole.js hallo.js --js_output_file hallo.out.js

如果你运行cat hallo.out.js,你会看到:
console.log=console.debug=console.info=function(){};sayhi();function sayhi(){console.log("hallo, world!")};

如果我使用mv hallo.out.js hallo.js进行测试并重新加载页面,我可以看到控制台现在为空。

希望这样可以澄清。请注意,我尚未在使用ADVANCED优化编译所有源代码的理想模式下进行测试,但我预计它也可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接