在高级模式下编译时,对象被删除或部分折叠 - Google Closure Compiler

时间:2014-11-26 11:24:16

标签: configuration namespaces annotations google-closure-compiler prototypal-inheritance

我正在使用带有Closure的angular,我遇到了@export注释的问题。特别是能够导出属性定义。我以为我有一些使用以下代码的东西,但它看起来很有气质。

/**
 * @export
 * @constructor
 */
com.MyController = function() {
   this.greeting = 'hello';
   this.goodbye = 'bye'
};

/**
 * @export
 */
com.MyController.prototype = {

    'sayGoodbye': function() {
        return this.goodbye;
    },

    'sayHello': function() {
        return this.greeting;
    }
};

有时编译器会导出原型上的所有方法,有时它只会导出'sayGoodbye',然后有时会完全折叠原型上定义的整个对象。

我知道我可以这样做:

/**
 * @export
 */
com.MyController.prototype.sayHello = function() {
    return this.greeting;
};

哪种方法有效,但是当它一直打字时变得非常费力,而且它的可读性也会降低。

我知道编译器有一个选项可以选择setExportLocalPropertyDefinitions,但是代码的开源版本目前没有设置这个的标志 - 我一直在搞乱Java源代码试图设置它但是到目前为止没有运气。

更新 因此,如果在不相关的类中存在另一个具有相同名称的方法,那么原型上的方法(例如,sayGoodbye)似乎将被导出。我猜它的导出不是因为它被定义为我最初希望的字符串,而是因为这两种不相关的方法之间存在一些混淆?

1 个答案:

答案 0 :(得分:0)

确保export的方法签名已定义:

  

使用@export注释的代码必须

     
      
  • 包括closure / base.js,或

  •   
  • 使用相同的方法签名定义goog.exportSymbol和goog.exportProperty。

  •   

<强>参考