[英]Why there is a 'amd' property in 'define' function?
我正在学习 jQuery 和 Backbone 源代码,并注意到他们检查是否有 requirejs:
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", [], function () { return jQuery; } );
}
if (typeof define === 'function' && define.amd) {
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
为什么在requirejs中的define
函数中总是有一个amd
属性?
而define.amd
始终是一个对象,哪个关键jQuery
是true
? 甚至我还没有导入 jQuery 模块?
这是一个惯例,AMD装载机应使用,以表明define
他们出口到全球空间的define
是由由AMD模块使用来定义自己。
如果 AMD 加载器没有使用这个约定,那么如果某个随机 JavaScript 库决定将一个define
函数导出到与 AMD 无关的全局空间,那么设计用于使用或不使用 AMD 加载器的代码将错误地认为它们用于存在 AMD 加载程序的环境中。
如果某个随机的第三方库决定也导出自己的define
函数(与定义 AMD 模块无关)并决定向其添加amd
属性,则仍然存在问题的风险,但风险很大低于我上面解释的方案没有使用的情况。
因此,您展示的代码中的 jQuery 和 Backbone 测试它是否用于存在 AMD 加载程序的 AMD 环境中,如果是,则将自身定义为 AMD 模块。
define.amd.jQuery
特定于 jQuery,它表示加载器能够同时加载多个版本的 jQuery。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.