繁体   English   中英

如何防止Closure Compiler重命名为“true”,“false”和“null”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM