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;