我正在尝试编译我的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(){}
}
};
答案 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文件中明确定义所有内容(或至少要调用的部分),以确保不会重命名。