3

我正在使用Luke Rodgers 的 Backbone 和 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

有谁知道为什么_.extend要修改backbone.js 中的调用?

4

1 回答 1

6

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

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

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

于 2012-06-20T16:40:35.377 回答