如何判断javascript库是否支持AMD

所以我开始学习如何使用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甚至没有全局.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...