Javascript 使用闭包编译器删除console.log
我想通过剥离所有Javascript 使用闭包编译器删除console.log,javascript,debugging,global-variables,closures,google-closure-compiler,Javascript,Debugging,Global Variables,Closures,Google Closure Compiler,我想通过剥离所有console.log(“废话”)调试语句来准备JS代码生成。我对如何使用一个流行的JS小型编译器来实现这一点感到困惑 /** @const */ var LOG = false; ... LOG && log('hello world !'); // compiler will remove this line ... //this will even work with `SIMPLE_OPTIMALIZATIONS` and no `--define=`
console.log(“废话”)
调试语句来准备JS代码生成。我对如何使用一个流行的JS小型编译器来实现这一点感到困惑
/** @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()
给出了一个错误?我是不是漏掉了什么明显的东西
file1.js的内容:
var foo='bar';
console.log("foo"+foo);
file2.js的内容
var baz='bazzy';
console.log("baz"+baz);
如果将代码拆分为多个文件,我认为您需要一个构建过程,将它们连接到一个立即调用的函数中。然后您的
var LOG=false代码>只能在顶部包含一次
如果“每个页面”,您的意思是每个页面都有单独的JavaScript文件,这些文件不打算连接在一起,那么是的,您需要在每个页面的顶部都有这些代码,但是您也没有充分利用闭包编译器
关于全局变量,是的,设置时需要使用窗口
,尽管我希望您只定义一个全局变量
使用log()
意味着有人定义了一个log()
函数,这样它就不那么冗长了
function log() {
return console.log.apply(console, arguments);
}
我想你不明白你链接中的答案。作者建议您创建一个新变量
var LOG = false;
然后您只需编写LOG&&&uuuuuuuuuuuuuuuuuuuuuuuuuuuu
(coresspoots toif(LOG)\uuuuu code\uuuuu;
)和&&之后的代码将不会被处理,因为布尔表达式的部分求值。将日志设置为true后,将对其进行处理。该变量通常称为“开关”或“标志”
顺便说一下,闭包编译器可能会编辑您的代码,但该代码在“编译”之后的行为必须与之前的行为相同。这是所有这些小型化和优化程序的主要原则(它们不能将快速排序转换为GTA5)。因此,不要使用闭包编译器使您的代码以不同的方式工作(如果是的话,这是不可能的-它们有一个bug!)。log
是一个通用的日志功能,它可以只是console.log
的包装器,也可以提供其他类型的日志。它只是用于演示。这个定义留给读者作为练习。@ChadKillingsworth谢谢,我不知道这是一个练习还是我还没有学会的JS。谢谢!我现在已经更好地解释了我的问题中“多个文件”的含义。请参阅编辑。-@user2736012您能提供一个“将它们连接到一个立即调用的函数中的构建过程”的基本示例吗?我不太清楚你说的是什么意思。Closure compiler正在从my file1.JS、file2.JS、jquery.JS等文件中生成一个大的JS文件。一些服务器端代码有助于实现一个自动化过程,即获取单个文件,将它们合并到一个文件中,对该文件运行所需的过程(如Closure compiler),并将结果输出到一个新文件,该文件将包含在项目中。好的,谢谢,现在已经清楚了。最后一个问题:为什么只有一个全球性的?仅仅因为良好的代码实践?防止名称冲突?其他原因?@Timperson:是的,减少主要为您描述的目的创建的global的数量被认为是一种良好的做法。。。名字冲突。-@IvanKuckir谢谢。“我想你不明白你链接中的答案。”。是的,这就是我问这个问题的原因。:)