【问题标题】:Closure compiler export all prototypes & static methods闭包编译器导出所有原型和静态方法
【发布时间】:2011-02-14 09:44:15
【问题描述】:

闭包编译器有没有一种简单的方法可以导出一个类及其所有原型和静态方法,并将名称保留为公共 API?默认情况下,高级选项会重命名所有变量,但您可以将内容导出到全局范围,例如:

window['MyClass'] = MyClass;

但是,这只会将 MyClass 导出到全局范围,所有原型和静态方法都被重命名。有人会认为您可以遍历原型并导出它们,但不:

for (var i in MyClass.prototype) {
    window['MyClass'].prototype[i] = MyClass.prototype[i];
}

这不起作用。我知道的唯一方法是像这样手动添加它们:

window['MyClass'].prototype['myFunction'] = MyClass.prototype.myFunction;

我想公开大约 50 个原型,所以这种方法不是首选。有谁知道如何方便地导出整个类?

【问题讨论】:

    标签: javascript compression google-closure-compiler


    【解决方案1】:

    您所描述的实际上是 externs 的用途: Prevent Google Closure Compiler from renaming settings objects

    您可以在此处查看大型 externs 文件的示例: http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.6.js

    你可以省略所有的 cmets,只使用如下语句:

    jQuery.prototype.add = function(arg1, context) {};
    

    为了确保 add 方法没有被重命名。您确实需要在 externs 文件的 cmets 中包含 @externs 或将其作为 --externs 传递给 Closure Compiler 以使事情正常工作。

    【讨论】:

      【解决方案2】:

      查看 @export 注释,它记录在 JavaScript 中 风格指南:http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Comments#Comments

      【讨论】:

      • 是的,我已经阅读过它,但您需要包含 Google Closure 才能使其正常工作,或者是否有解决方法?
      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多