ChatGPT解决这个技术问题 Extra ChatGPT

为什么 Underscore.js 删除了对 AMD 的支持?

1.3.0 — 2012 年 1 月 11 日 从 Underscore 中删除了 AMD (RequireJS) 支持。如果您想将 Underscore 与 RequireJS 一起使用,您可以将其作为普通脚本加载、包装或修补您的副本,或下载分叉版本。

他们为什么这样做?有人知道吗?因为他们只是在几个月前(10 月)才添加的,而且据说 AMD(异步模块定义)远远优于 CommonJS 模块。

更新:截至 2013 年 12 月,再次支持此功能。

我希望您可以链接到帖子、邮件讨论或 Twitter 评论,以促进此行为或开发人员的澄清。
异步模块定义不是高级模块加载器,参见github.com/amdjs/amdjs-api/wiki/AMD
到目前为止,被认为远优于 commonjs/etc 的 AMD 最突出的声音是 require.js 的创建者本人。我不太愿意盲目地听取特定方法的创造者的意见,而不是听一群人的意见,到目前为止,陪审团还没有定论。

C
Community

Jeremycomments of the commit 中给出了他的理由:

是的。不支持特定的脚本加载器肯定会让它们更容易正常工作。我很抱歉首先合并支持。

他还tweeted详细介绍了更改(来自 a later comment 的链接):

...因为 AMD 支持打破了在也恰好使用 Require.js 的页面上的常规下划线嵌入...


@SalmanPK 此更改仅意味着下划线现在与加载程序无关。因此,您可以自由地为您需要的任何装载机进行设置。这怎么是坏事?
因为现在我们不能在没有额外配置或手动编辑的情况下将它与任何 AMD 兼容的加载器(RequireJS、Almond.js、curl.js、lsjs、bdLoad、Yabble 等)一起使用。
@SalmanPK 使用专用于 AMD 下划线的分叉,然后:github.com/amdjs/underscore
注意:正如问题中提到的,截至 2013 年 12 月,Underscore 再次符合 AMD 标准。
@BradParks 感谢您的澄清。
A
Andrew Marshall

Underscore 的开发人员认为,拥有 AMD 支持会破坏对非 AMD 启用脚本的支持。实际上并非如此,因为您可以拥有一个既支持 AMD 又可以在非 AMD 部署上按原样工作的脚本。

现在有一个下划线的替代品:Lo-Dash。其中,与下划线中没有的其他功能一起,包括 AMD/非 AMD 双重性。


我认为这个答案被低估了。但是,我觉得这个答案的语气(有意或无意)对下划线开发人员居高临下,我认为这不合适。
lodash 听起来很酷,但我不明白这是如何回答问题的
我同意你们两个 - 它并没有真正回答“为什么”。相反,它很快提供了一个替代方案。所以我正在编辑答案
Z
ZenMaster

我觉得有必要补充这个相当古老的问题。

Backbone 和 Underscore 现在都支持 AMD:

下划线提交 骨干提交

讨论(尽管 Backbone 的讨论有点令人费解,因为讨论的基调与实际结果之间存在明显差异):

下划线问题 骨干问题


m
mikemaccana

ES5-shim 提供许多与下划线和 lodash 相同的功能(array.forEach()、array.map() 等)。

ES5-shim 原生支持 AMD,不像 underscore 和 lodash,不会添加你的浏览器可能已经提供的东西的额外副本。相反,它将原生 ES5 功能添加到旧版浏览器中。

当 IE8 和其他较旧的浏览器消失时,您可以简单地删除 ES5-shim 依赖项,而无需像使用 lodash 或下划线那样移植代码。


问题不是关于下划线库的功能,而是关于这种(有争议/不透明)架构选择的原因。
@c69 明白,但 lodash 的答案也没有涵盖从下划线中删除 AMD 的原因。由于这个答案是高度适度的,我想指出将 ES5 本身 / ES5 shim 用于旧版浏览器提供了一种对未来更安全的选择。