我想通过剥离所有console.log("blah blah")
调试语句来使我的JS代码生产准备就绪。我对this popular SO answer (code below)如何使用Google's closure compiler这个流行的JS minifier /编译器感到困惑。
/** @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);
如果您将代码拆分为多个文件,我认为您希望有一个构建过程将它们连接到一个立即调用的函数中。然后你的var LOG = false;
可以只在顶部包含一次。
如果通过“每个页面”,你的意思是你每个页面都有单独的JavaScript文件,这些文件并不是要连接在一起,那么是的,你需要在每个文件的顶部都有这个代码,但是你也是没有充分利用Closure Compiler。
关于全局变量,是的,你需要在设置时使用window
,尽管我希望你只定义一个全局变量。
使用log()
意味着有人定义了log()
函数,因此它不那么冗长。
function log() {
return console.log.apply(console, arguments);
}
我想你不明白你的链接的答案。作者建议您创建一个新变量
var LOG = false;
然后你只需编写LOG && __code__ ;
(coressponds到if(LOG) __code__ ;
)和&&之后的代码将不会被处理,因为部分评估了布尔表达式。将LOG设置为true后,将对其进行处理。变量通常称为“开关”或“标志”。
顺便说一下,Closure Compiler可以编辑你的代码,但是代码必须在“编译”之后的行为与之前一样。这是所有这些缩小器和优化器的主要原则(它们不能将您的快速排序转换为GTA 5)。所以不要使用Closure Compiler来使你的代码以不同的方式工作(如果不是这样的话 - 它们就会有错误!)。
我能够使用闭包编译器编译出console.log。但它似乎是一种网络钓鱼方案,因为在使用编译器后,下载消失了,当我再次下载Java闭包编译器时,它无法加载。 Google的开发人员似乎正在使用搜索兴趣来销售服务或非法收集代码。