[英]Closure compiler: How to declare object and all of its properties as extern?
我正在尝试编译使用chrome.i18n.getMessage()
和其他几个chrome
属性的Google Chrome扩展程序。
我正在使用Java库进行编译,并且具有--externs
参数包含的externs.js
文件。
我想知道是否可以将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(){}
}
};
我使用第三个示例修复了编译后引入的错误,最终在定义越来越多的chrome
属性时遇到了一些困难。 然后,我的想法是查看是否有人为chrome
创建了extern文件,从而将我引到了Closure Compiler的Google来源。 Google足以为几个知名的库创建externs文件:
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文件中明确定义所有内容(或至少要调用的部分),以确保不执行重命名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.