1.3.0 — 2012 年 1 月 11 日 从 Underscore 中删除了 AMD (RequireJS) 支持。如果您想将 Underscore 与 RequireJS 一起使用,您可以将其作为普通脚本加载、包装或修补您的副本,或下载分叉版本。
他们为什么这样做?有人知道吗?因为他们只是在几个月前(10 月)才添加的,而且据说 AMD(异步模块定义)远远优于 CommonJS 模块。
更新:截至 2013 年 12 月,再次支持此功能。
Jeremy 在 comments of the commit 中给出了他的理由:
是的。不支持特定的脚本加载器肯定会让它们更容易正常工作。我很抱歉首先合并支持。
他还tweeted详细介绍了更改(来自 a later comment 的链接):
...因为 AMD 支持打破了在也恰好使用 Require.js 的页面上的常规下划线嵌入...
Underscore 的开发人员认为,拥有 AMD 支持会破坏对非 AMD 启用脚本的支持。实际上并非如此,因为您可以拥有一个既支持 AMD 又可以在非 AMD 部署上按原样工作的脚本。
现在有一个下划线的替代品:Lo-Dash。其中,与下划线中没有的其他功能一起,包括 AMD/非 AMD 双重性。
我觉得有必要补充这个相当古老的问题。
Backbone 和 Underscore 现在都支持 AMD:
下划线提交 骨干提交
讨论(尽管 Backbone 的讨论有点令人费解,因为讨论的基调与实际结果之间存在明显差异):
下划线问题 骨干问题
ES5-shim 提供许多与下划线和 lodash 相同的功能(array.forEach()、array.map() 等)。
ES5-shim 原生支持 AMD,不像 underscore 和 lodash,不会添加你的浏览器可能已经提供的东西的额外副本。相反,它将原生 ES5 功能添加到旧版浏览器中。
当 IE8 和其他较旧的浏览器消失时,您可以简单地删除 ES5-shim 依赖项,而无需像使用 lodash 或下划线那样移植代码。