为什么会有一个'amd'属性在'define'作用

Why there is a 'amd' property in 'define' function?

本文关键字:define 作用 属性 amd 为什么 有一个      更新时间:2023-09-26

我正在学习jQuery和Backbone源代码,注意到他们检查是否有requirejs:

jQuery 1.9.1

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总是一个对象,哪个密钥jQuerytrue?连我都没有导入jQuery模块?

AMD加载程序应该使用这一约定来指示它们导出到全局空间的define是AMD模块用来定义自己的define

如果AMD加载程序不使用此约定,那么如果某个随机JavaScript库决定将define函数导出到与AMD无关的全局空间中,那么设计为使用或不使用AMD加载程序的代码将错误地认为它们是在存在AMD加载程序时使用的。

如果某个随机的第三方库决定也导出自己的define函数(与定义AMD模块无关),并且决定向其添加amd属性,那么事情仍然有出错的风险,但风险远低于我上面解释的方案。

因此,您所展示的代码中的jQuery和Backbone测试它是否在存在AMD加载程序的AMD环境中使用,如果是,则将其定义为AMD模块。

define.amd.jQuery是jQuery特有的,表示加载器能够同时加载多个版本的jQuery。