闭包编译器删除的比我想要删除的更多内容
Closure compiler removes more than what I want to remove
我遵循了另一个 SO 线程的建议,从我的代码中删除了console.log()
语句。
不幸的是,现在 Closure 编译器正在删除我的整个代码,而不仅仅是 console.log()
语句。
有人可以解释一下吗?我不知所措...
JS 文件 1
(function(){
/** @const */
LOG = false;
function log() {
return console.log.apply(console, arguments);
}
LOG && log('hello world !');
var foo='bar';
LOG && log("foo"+foo);
})();
JS 文件 2
(function(){
/** @const */
LOG = false;
function test(){
alert('testing...');
}
var baz='bazzy';
LOG && log("baz"+baz);
})();
闭包编译器步骤:
$ java -jar compiler-latest/compiler.jar --js j1.js j2.js --js_output_file compiled.js
结果:
(function(){LOG=!1})();(function(){LOG=!1})();
因为编译器确定无法访问其余代码。
这两个文件都有一个常量 LOG 设置为 false,并且您没有导出任何内容(goog.export* 或 window['...'] = ...)。可以执行的代码前面有一个 LOG &&&,这意味着它没有被执行。
因此,什么都不能执行,因此编译器将其全部删除。
为什么功能测试被取消:没有人叫它,就这么简单。在您的一个文件中调用它,编译器不会将其剥离。
您可以(实际上应该)定义 LOG 并仅在一个文件中进行日志。为此,请删除每个文件中代码周围的匿名函数调用。您可以使用命令行选项告诉编译器将其添加回已编译的代码:
--output_wrapper=(function(){ %output% })();
所以你的两个文件应该看起来像这样:
JS 文件 1
/** @const */
var LOG = false;
function log() {
return console.log.apply(console, arguments);
}
LOG && log('hello world !');
var foo='bar';
LOG && log("foo"+foo);
JS 文件 2
function test(){
alert('testing...');
}
var baz='bazzy';
LOG && log("baz"+baz);
// call test, so it a) isnt stripped and b) well, executed :)
test();
此外,您可能希望将全局变量和函数放入"命名空间"中,以免污染全局范围:
// create namespace (which is just a normal object)
var MyNamespace = {};
// create a namespaced function
MyNamespace.test = function() {
alert('test');
}
// call it
MyNamespace.test();
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- JS编译器/包管理器,用于版本控制
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- 使用Google闭包编译器调试代码删除
- 使用闭包编译器简单优化从函数内部删除调试代码
- 如何防止谷歌闭包编译器删除一行
- JS 编译器删除正则表达式中的转义 () 字符
- 闭包编译器删除的比我想要删除的更多内容
- 我如何告诉谷歌闭包编译器不要删除一个变量
- 闭包编译器删除类名称空间
- 是否可以将匿名函数标记为“实时代码”?这样闭包编译器就不会删除它
- 谷歌闭包编译器-基于外部的死代码删除
- 谷歌闭包编译器错误地删除了函数调用