所以我开始学习如何使用requirejs并将其与其他一些可用的
javascript库结合起来.据我所知,你需要填充所有不是
Asynchronous module definition compatible (AMD)的库,但除了在库代码中搜索“require”之外,是否有更简单的方法来确定哪些库支持AMD哪些库不支持?作为一个例子,我知道jquery支持AMD,但jqueryui没有,我只知道这是因为“有人告诉我”.
解决方法
这就是jQuery如何声明它的AMD.这只是一堆if语句.除非库有一些库.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 ._ .define,这是一个包含已加载模块的名称 – 定义映射的对象.
例如,如果我将jQuery(默认情况下具有AMD)加载到也具有RequireJS的页面中,则该对象中将存在jquery属性并包含与全局相同的jQuery对象.然后你可以比较.以下内容将返回true:
require.s.contexts._.defined.jquery === jQuery require.s.contexts._.defined.jquery === $
但是,这假设您知道模块名称和/或有要比较的全局.这可能不适用于所有情况.例如,jQuery UI不仅仅是一大段代码.它是jquery-ui.js下的一堆插件.它们可能是集体命名的,也可能是每个小部件的模块. jQuery UI甚至没有全局.