针对Google Closure Compiler的Underscore.js externs

时间:2012-06-20 15:59:58

标签: javascript backbone.js underscore.js google-closure-compiler

我正在使用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的调用?

1 个答案:

答案 0 :(得分:6)

很高兴你发现我的externs文件很有用。在我的头脑中,我相信您遇到的问题是由于您使用externs文件并编译库。

当库不是编译过程的一部分时,通常会使用externs文件。有些人可能只是使用(例如)jQuery,Underscore等预编译版本,或者链接到共享的Google库以利用预先缓存的js,但仍然希望Closure Compiler能够理解jQuery和Underscore API,所以他们使用外部。

如果您正在寻找的是Underscore和Backbone库中的显式类型注释,这是一个稍微不同的问题。