我正在使用Luke Rodgers' Backbone and Underscore externs,但无法解决为什么在编译输出中修改_.extend
。
例如在Backbone 0.9.2中,以下代码(193:195):
if (defaults = getValue(this, 'defaults')) {
attributes = _.extend({}, defaults, attributes);
}
编译为:
if(c=r(this,"defaults"))a=f.extend({},c,a);
我使用了以下编译命令:
java -jar compiler.jar
--externs backbone-0.9.2-externs.js
--externs underscore-1.3.3-externs.js
--compilation_level ADVANCED_OPTIMIZATIONS
--js underscore-1.3.3.js
--js backbone-0.9.2.js
--js_output_file compiled.js
如果我包含其他JavaScript文件:
--js test.js
包含以下内容:
_.extend({}, {name: 'test'});
在compiled.js
中未经修改。
有谁知道为什么要修改backbone.js中_.extend
的调用?
答案 0 :(得分:6)
很高兴你发现我的externs文件很有用。在我的头脑中,我相信您遇到的问题是由于您使用externs文件并编译库。
当库不是编译过程的一部分时,通常会使用externs文件。有些人可能只是使用(例如)jQuery,Underscore等预编译版本,或者链接到共享的Google库以利用预先缓存的js,但仍然希望Closure Compiler能够理解jQuery和Underscore API,所以他们使用外部。
如果您正在寻找的是Underscore和Backbone库中的显式类型注释,这是一个稍微不同的问题。