【问题标题】:Underscore.js externs for Google Closure CompilerGoogle Closure Compiler 的 Underscore.js externs
【发布时间】:2012-06-21 00:40:35
【问题描述】:

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

【问题讨论】:

  • 愚蠢的问题 - 有用吗?
  • 上面的代码只是一个突出问题的小例子。在我的应用程序中,我收到错误:“未捕获的 TypeError:无法调用未定义的“扩展”方法”、“未捕获的 TypeError:无法调用未定义的“每个”方法、“未捕获的 ReferenceError:未定义主干”,...

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


【解决方案1】:

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

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

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

【讨论】:

  • 啊哈,我显然有一个“如果我用锤子敲得足够重,它一定会起作用”的时刻。因此,在使用 ADVANCED_OPTIMIZATIONS 时,似乎没有办法使用闭包编译器创建包含下划线和主干的单个 JavaScript 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 2014-10-15
  • 2011-05-12
  • 2017-10-04
  • 1970-01-01
  • 2019-09-27
相关资源
最近更新 更多