Javascript 如何在goog.closure高级优化中不编译某些代码
当我在闭包中使用高级_优化时,我可以添加到Javascript 如何在goog.closure高级优化中不编译某些代码,javascript,compilation,google-closure-compiler,google-closure,Javascript,Compilation,Google Closure Compiler,Google Closure,当我在闭包中使用高级_优化时,我可以添加到web.config属性中,例如: <compilation debug="false"> 在高级模式下,我不会在.js文件中看到此脚本 我想对我自己的属性也这样做-我创建了define.js文件: Define.js: goog.scope(function() { define.IS_SHOW_CODE = false; } 并编写了代码: 如果(!define.IS_SHOW_CODE){CODE} 我仍然可以在编译的.js
web.config
属性中,例如:
<compilation debug="false">
在高级模式下,我不会在.js文件中看到此脚本
我想对我自己的属性也这样做-我创建了define.js文件:
Define.js:
goog.scope(function() {
define.IS_SHOW_CODE = false;
}
并编写了代码:
如果(!define.IS_SHOW_CODE){CODE}
我仍然可以在编译的.js文件中找到这个if及其内容
如何防止闭包在高级模式下编译脚本?好的,我找到了方法-
我必须使用前缀goog.[xxx]来告诉编译器删除里面的脚本。
使用“define”并没有删除脚本
因此,我已将define.IS\u SHOW\u代码更改为goog.IS\u SHOW\u代码如果“goog”起作用,则可能缺少“define”的声明
它应该是这样的:
var define = {}; // goog.provide('define') would also work here.
/** @define {boolean} */
define.IS_SHOW_CODE = true;
goog.*仅用于作为闭包一部分的代码。编译器的死代码消除对于goog.*或define.*或其他任何工具都应该起到相同的作用。如果要修改闭包编译器(或调用编译器的任何工具)命令行中常量的值,则需要使用@define对其进行注释。有关示例,请参见。解释:
@define
生成编译时常量,即闭包从一开始就知道此变量的值,并强制它不能更改。因此,如果它看到if(define.IS\u SHOW\u code){…}
,并且知道值必须是false
,它就知道它可以消除整个块。我想你没有领会我的意思。我是说在外部名称空间中声明的@define将无法按预期工作。如果未声明“define”名称空间,则将假定该名称空间是外部的,而不是内联的,但在编译时替换该值。
var define = {}; // goog.provide('define') would also work here.
/** @define {boolean} */
define.IS_SHOW_CODE = true;