获取Closure / Plovr从if中删除函数总是假的

时间:2013-06-17 15:13:54

标签: javascript google-closure-compiler google-closure plovr

if语句显然总是错误的,例如。 if (false),closure删除了语句。

我的代码如下所示:

if (settings.lang === "en"){
    lib.doSomething();
}

settings.lang是常数。

/** 
 * @type {string}
 * @const 
 */ 
settings.lang = "fr" ;  

因此,当它等于“fr”时,编译器可以在编译时删除iflib.doSomething的定义。但事实并非如此。有没有办法让它做到这一点?

在您问我为什么不删除该代码之前:对于其他客户,settings.lang 设置为en

3 个答案:

答案 0 :(得分:2)

1)确保正确定义“设置”:

/** @const */
var settings = {};

2)确保正确定义“settings”lang:

/** @const */ 
settings.lang = "fr" ;

3)确保在定义值后引用该值:

if (settings.lang == "en") ...

在高级模式下,如果未以防止属性崩溃的方式使用设置(例如,将“设置”作为参数传递给函数将导致值转义并且不可折叠),则将内联并删除此内容。

如果你使用@define:

,这是简化的
/** @const */
var settings = {};

/** @define {string} */
settings.lang = "fr";

如果定义的定义在某种程度上无效,您应该收到警告。

答案 1 :(得分:1)

听起来你正在使用某种编译模式(很可能是'SIMPLE'编译模式,因为它是the default in plovr)而不是'ADVANCED'编译模式。高级编译模式is the one that does dead code removal

答案 2 :(得分:1)

goog.LANG是用goog.define定义的吗?最后我检查了Plovr与goog.define不兼容(它没有最新的编译器)确保你开始使用兼容版本的Closure Library。