[英]How to prevent Closure Compiler from renaming “true”, “false” and “null”
Google Closure Compiler重命名代码中的所有“true”,“false”和“null”出现;
var s = true, x = null, V = false;
而是使用这些短线; 在诸如此类的条件下;
if (someVariable == s)
现在; Google Analytics代码定义了自己的“s”变量; 覆盖值“true”; 正如你所看到的,这会导致很多问题。
我不想改变GA代码; 我只是希望Closure Compiler退出重命名true等等.Externs不起作用。
你知道有什么方法可以做到这一点吗?
事实证明,可以阻止Google Closure Compiler通过名为“output_wrapper”的参数将全局定义(函数和/或变量)打印到命令行代码中,例如;
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --output_wrapper "(function(){%output%})();" --js input.js --js_output_file output.js
这样,它不会与全局变量冲突,并在匿名函数包装器中打印所有代码。
CompilerOptions
有一个名为aliasKeywords的选项。 设置为false
,编译器不会将'true','false'和'null'别名。
你的主要问题是你的代码在全局范围/命名空间中运行,这就是事情崩溃的原因。
要修复它,将它放在一个匿名函数包装器中 :
(function() {
// a self contained "namespace"
var s = true; // won't be affected by the analytics code anymore
// expose something
window.foo = function() {};
})(); // execute the function immediately
这是防止变量名冲突等的常用习惯用法。如果需要在包装器外部使用,只需将它们作为属性添加到window
对象中。
不要理会关闭,当你更改代码时,最终可能会给变量赋予不同的名称。 当你的页面上突然出现更多全局变量时又是什么呢? 所有这些问题都是将代码放在如上所述的包装器中的充分理由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.