【问题标题】:Preventing closure compiler from renaming certain variables防止闭包编译器重命名某些变量
【发布时间】:2010-06-11 20:00:58
【问题描述】:

我有一个 javascript 文件,其中包含一个不能重命名的全局对象(来自 Google Analytics 异步跟踪器的_gat)。

Google 闭包编译器不得重命名此对象,因为 Google Analytics 会查找具有此特定名称的变量。

我查看了提到的 Javascript 文档符号:http://code.google.com/closure/compiler/docs/js-for-compiler.html - 但是,我找不到任何关于变量“保护”的信息。

无论我使用简单编译还是高级编译都存在问题。

如何确保_gat 变量不被重命名?

【问题讨论】:

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


    【解决方案1】:

    使用Closure Compiler web app,你可以设置js_externs。更多示例请参考Advanced Compilation and Externs

    // ==ClosureCompiler==
    // @compilation_level ADVANCED_OPTIMIZATIONS
    // @output_file_name default.js
    // @js_externs _gat
    // ==/ClosureCompiler==
    

    【讨论】:

      【解决方案2】:

      使用 base.js 中的 goog.exportSymbol 函数。文档在这里:http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.html

      用法就像

      goog.exportSymbol("_gat", _gat)
      

      【讨论】:

      • 您能详细说明一下吗?我在哪里可以找到更多信息?
      • (很抱歉最初的回复很简洁,是从我的手机回复的,我的屏幕键盘功能很弱)。
      【解决方案3】:

      http://closuretools.blogspot.com/2011/01/property-by-any-other-name-part-1.html关于“所有未引用”的部分

      将某些 vars 放入 ' ' >>> 'bob' 可以防止它们被编译器重命名

      【讨论】:

      • 这是一个有趣的选项。即使在执行 ADVANCED_OPTIMIZATIONS 时,Closure 也不会重命名对方法的字符串引用。例如,如果引用如下:window['foo'],它不会重命名 window.foo
      【解决方案4】:

      如果它没有被声明为您正在编译的代码的一部分,那么 extern 声明是合适的: http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多