因此,我已经开始学习如何使用requirejs并将其与其他可用的其他JavaScript库结合起来。据我了解,您需要填充所有不是Asynchronous module definition compatible (AMD)的库,但是除了在库代码中搜索“require”之外,还有一种更简便的方法来确定哪些库支持AMD,哪些库不支持AMD?例如,我知道jquery支持AMD,但jqueryui不支持AMD,我之所以知道这一点是因为“有人告诉我”。

最佳答案

这就是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; } );
  }
}

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

例如,如果我将jQuery(默认情况下为AMD)加载到也具有RequireJS的页面中,则该对象中将存在jquery属性,并包含与全局对象相同的jQuery对象。然后,您可以进行比较。以下将返回true:
require.s.contexts._.defined.jquery === jQuery
require.s.contexts._.defined.jquery === $

但是,这假设您知道模块名称和/或存在要与之进行比较的全局变量。这可能并非在所有情况下都有效。例如,jQuery UI不仅是一大段代码。这是一堆位于jquery-ui.js下的插件。它们有可能被统一命名,也可能每个小部件都有一个模块。 jQuery UI甚至没有全局变量。

关于javascript - 如何判断JavaScript库是否支持AMD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20182196/

10-13 04:45