Closure编译器:如何将对象及其所有属性声明为extern?

时间:2014-01-27 15:42:52

标签: javascript google-closure-compiler

我正在尝试编译我的Google Chrome扩展程序,该扩展程序使用chrome.i18n.getMessage()和其他几个chrome属性。

我正在使用Java库进行编译,并且我有一个externs.js文件,其中包含--externs个参数

我想知道是否可以将chrome声明为extern,而不必指定我想要保留的所有属性?

到目前为止,我尝试了以下3种方法:

示例1:

/** @const */
var chrome = {}; // chrome.i18n.getMessage() gets renamed to chrome.a.b()

示例2:

/** @const */
window.chrome = {}; // chrome.i18n.getMessage() gets renamed to chrome.a.b()

示例3:

/* chrome.i18n.getMessage() is preserved, but chrome.runtime.connect() is renamed
 * to chrome.b.c()
 */
var chrome = {
  i18n: {
    getMessage: function(){}
  }
};

1 个答案:

答案 0 :(得分:0)

我修复了第三个例子,同时修复了编译后引入的bug,最终遇到了一些困难,同时定义了chrome的越来越多的属性。我的想法是看看是否有人为chrome创建了一个extern文件,它引导我使用Closure编译器的Googles源代码。谷歌已经足够好为几个知名的图书馆创建外部文件:

https://code.google.com/p/closure-compiler/source/browse/#git%2Fexterns https://code.google.com/p/closure-compiler/source/browse/#git%2Fcontrib%2Fexterns

如果您的库未在上面列出,

Closure Compiler Externs Extractor可能也很有用: http://www.dotnetwise.com/Code/Externs/index.html

通过contrib/externs/chrome_extensions.js查看我的问题的答案似乎是:你不能

看起来需要在externs文件中明确定义所有内容(或至少要调用的部分),以确保不会重命名。