if语句显然总是错误的,例如。 if (false)
,closure删除了语句。
我的代码如下所示:
if (settings.lang === "en"){
lib.doSomething();
}
settings.lang
是常数。
/**
* @type {string}
* @const
*/
settings.lang = "fr" ;
因此,当它等于“fr”时,编译器可以在编译时删除if
和lib.doSomething
的定义。但事实并非如此。有没有办法让它做到这一点?
在您问我为什么不删除该代码之前:对于其他客户,settings.lang
设置为en
。
答案 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。