是否可以检测脚本是否作为RequireJS模块加载?

mwc*_*wcz 7 javascript amd requirejs

我研究是否有检测,这是一种肯定,无论是给定的脚本目前正在RequireJS加载.一般来说AMD模块的答案会更好,但我的用例只是RequireJS.

jQuery和其他库"检测"它是这样的:

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

在大多数情况下这已足够,但问题是它不会检测脚本是否作为AMD模块加载,它只检测是否define存在并支持AMD规范.

是否有一种方法,无论是使用RequireJS还是通常使用AMD模块,脚本都可以确定(实际上)它是否作为模块加载?

jgi*_*ich 5

看一下指定的()

ParentRequire.specified(moduleName):如果模块已被请求或正在加载并且应该在某个时刻可用,则返回 true。

if (typeof require === "function" && typeof require.specified === "function" && require.specified("jquery")) {
    define("jquery", [], function () {
        return jQuery;
    });
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是如何获取模块名称,因为它可能会根据用户设置而有所不同。有一个专门的模块可以实现这一点,但只有当您已经处于定义调用中时,该模块才有效。我建议您联系Requirejs 开发人员jrburke 。

  • 我已将此问题添加到 RequireJS 邮件列表中,希望获得更好的信息:https://groups.google.com/d/topic/requirejs/iDnC4Cda7UQ/discussion (3认同)