Configuration 在高级模式下编译时删除或部分折叠的对象-Google Closure编译器

Configuration 在高级模式下编译时删除或部分折叠的对象-Google Closure编译器,configuration,namespaces,annotations,google-closure-compiler,prototypal-inheritance,Configuration,Namespaces,Annotations,Google Closure Compiler,Prototypal Inheritance,我将angular与闭包一起使用,并且@export注释有问题。特别是能够导出特性定义。我原以为我有以下代码,但它似乎非常喜怒无常 /** * @export * @constructor */ com.MyController = function() { this.greeting = 'hello'; this.goodbye = 'bye' }; /** * @export */ com.MyController.prototype = { 'sayGo

我将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;
    }
};
有时候编译器会导出原型上的所有方法,有时候它只会导出“saybayound”,有时候它会完全折叠原型上定义的整个对象

我知道我能做到:

/**
 * @export
 */
com.MyController.prototype.sayHello = function() {
    return this.greeting;
};
这是可行的,但是它开始变得非常费劲键入这一切的时候,以及它的可读性较差

我知道编译器有一个选项可以设置ExportLocalPropertyDefinitions,但是开源版本的代码目前没有设置这个的标志-我一直在尝试和设置Java源代码,但到目前为止运气不好

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

确保定义了导出的方法签名:

使用@export注释的代码必须

包括closure/base.js,或

在它们自己的代码库中使用相同的方法签名定义goog.exportSymbol和goog.exportProperty

参考资料


由于引用了原型方法,因此不应重命名或删除它们。这好像是一个错误。你能发布一个问题吗?谢谢,刚刚在这里发布了一个问题: