我想通过剥离所有console.log("blah blah")
调试语句来使我的JS代码生成准备就绪。关于如何使用this popular SO answer (code below)这个流行的JS minifier /编译器,我对Google's closure compiler感到困惑。
/** @const */
var LOG = false;
...
LOG && log('hello world !'); // compiler will remove this line
...
//this will even work with `SIMPLE_OPTIMALIZATIONS` and no `--define=` is necessary !
两个问题:
倍数文件:上述代码如何处理多个文件(以下基本示例)?它必须处于关闭状态,对吧?这不是意味着您必须在每个页面上放置此代码吗?此外,它是否也意味着您必须在每个页面上的这些闭包内将var foo='bar'
到var window.foo='bar';
的全局变量更改为全局变量?
小问题:不应该是console.log('...')
而不是log('...')
,因为log()
会出错吗?我错过了一些明显的东西吗?
<script src='/assets/js/file1.js'></script>
<script src='/assets/js/file2.js'></script>
file1.js的内容:
var foo='bar';
console.log("foo"+foo);
file2.js的内容
var baz='bazzy';
console.log("baz"+baz);
答案 0 :(得分:2)
如果您将代码拆分为多个文件,我认为您希望有一个构建过程将它们连接到一个立即调用的函数中。然后,您的var LOG = false;
可以只包含在顶部一次。
如果通过“每个页面”,您的意思是每个页面都有单独的JavaScript文件,这些文件不能连接在一起,那么是的,您需要将代码放在每个页面的顶部,但是“我也没有充分利用Closure Compiler。
关于全局变量,是的,你需要在设置时使用window
,但我希望你只定义一个全局变量。
log()
的使用意味着有人定义了log()
函数,因此它的详细程度较低。
function log() {
return console.log.apply(console, arguments);
}
答案 1 :(得分:0)
我认为你不理解你的链接的答案。作者建议您创建一个新变量
var LOG = false;
然后你只需写LOG && __code__ ;
(coressponds到if(LOG) __code__ ;
)和&amp;&amp;&amp;因为部分评估布尔表达式,所以不会被处理。将LOG设置为true后,将对其进行处理。该变量通常称为“开关”或“标志”。
顺便说一句,Closure Compiler可能会编辑你的代码,但代码必须在“编译”之后表现出与之前相同的。这是所有这些缩小器和优化器的主要原则(它们不能将您的快速排序转换为GTA 5)。所以不要使用Closure Compiler来使你的代码以不同的方式工作(如果不是这样的话 - 它们就会有错误!)。
答案 2 :(得分:0)
我能够使用闭包编译器编译出console.log。但这似乎是网络钓鱼方案,因为使用编译器后,下载消失了,而当我再次下载Java封闭编译器时,它无法加载。 Google的开发人员似乎正在利用搜索兴趣来出售服务或非法收集代码。