如何判断javascript库是否支持AMD

Sti*_*rez 7 javascript amd

所以我开始学习如何使用requirejs并将其与其他一些可用的javascript库结合起来.据我所知,你需要填充所有非异步模块定义兼容的库(AMD),但除了通过库代码搜索"require"之外,还有一种更简单的方法可以找出哪些库支持AMD而哪些库不支持?作为一个例子我知道jquery支持AMD,但jqueryui没有,我只知道这是因为"有人告诉我".

Jos*_*eph 5

这就是 jQuery 声明其 AMD 的方式。这只是一堆 if 语句。除非图书馆有一些library.AMD === true,否则无法从图书馆本身进行检查。

if ( typeof module === "object" && module && typeof module.exports === "object" ) {
  module.exports = jQuery;
} else {
  window.jQuery = window.$ = jQuery;
  if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function () { return jQuery; } );
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,有一种方法可以检查已加载的模块。这个答案指出您可以检查require.s.contexts._.defined,它是一个包含已加载模块的名称定义映射的对象。

例如,如果我将 jQuery(默认情况下具有 AMD)加载到也具有 RequireJS 的页面中,则jquery该对象中将存在一个属性,并包含与全局相同的 jQuery 对象。然后你就可以比较了。将返回以下内容true

require.s.contexts._.defined.jquery === jQuery
require.s.contexts._.defined.jquery === $
Run Code Online (Sandbox Code Playgroud)

但是,这假设您知道模块名称和/或有一个全局可供比较。这可能并不适用于所有情况。例如,jQuery UI 不仅仅是一大段代码。它是一堆位于jquery-ui.js. 它们有可能被集体命名或每个小部件一个模块。jQuery UI 甚至没有全局的。