编程语言
首页 > 编程语言> > javascript-使用RequireJS加载jQuery插件—即使指定了deps后,jQuery也会间歇地未定义?

javascript-使用RequireJS加载jQuery插件—即使指定了deps后,jQuery也会间歇地未定义?

作者:互联网

我正在尝试通过RequireJS加载jQuery.jstree.您可以在这里查看插件的确切来源:https://gist.github.com/MeoMix/7882144

据我了解,jQuery.jstree具有三个依赖项:jQuery,jQuery UI和jQuery.cookie.

首先,加载我的RequireJS垫片配置,然后调用初始的“ require”开始:

require.config({

    //  Set the base URL to the Scripts directory of CSWeb
    baseUrl: '/csweb/Scripts/',

    shim: {
        'jquery-ui': ['jquery'],
        'jquery.jstree': ['jquery', 'jquery-ui', 'jquery.cookie'],
        'jquery.cookie': ['jquery']
    }

});

在这里,我定义了相对于JavaScript文件根目录的基本URL.文件jquery.js位于baseUrl.我还定义了两个插件的依赖关系.注意:我尝试使用更明确的填充声明,包括定义导出.我注意到效果没有差别.

定义配置后,我调用:

require([
    'jquery',
    'jquery-ui',
    'jquery.cookie',
    'jstree/jquery.jstree'
], function () {
    'use strict';

});

这样做会间歇性地产生错误.显然是异步加载问题.该错误显示为:

Uncaught ReferenceError: jQuery is not defined jquery.jstree.js:978

jquery.jstree的第978行只是将jQuery传递到闭包中以开始插件初始化的位置:

// 978 jquery.jstree.js: })(jQuery);

我在这里不明白什么?我的大多数插件似乎都没有遇到这个问题.关于此jstree插件的编写方式是否特别糟糕,以至于它使RequireJS适合?还是我不了解RequireJS垫片配置的核心机制?

更新1:看来这与我从路径加载jquery.jstree有关.如果加载另一个空文件(jstree / jquery.test),则可以替换此问题.但是,如果我随后将测试向上移动到一个目录,使其与其他插件处于同一级别,则所有加载都正常.

解决方法:

提供给匀场配置的整个路径必须与所需模块的整个路径匹配.

您将垫片命名为jquery.jstree,但您将其命名为jstree / jquery.jstree,因此RequireJS不使用垫片,因此不知道插件依赖于jquery等,因此会出现间歇性错误.

对于我可能想在全球范围内使用的插件之类的东西,我更喜欢给它们起一个众所周知的名称,我可以在整个应用程序中使用它而不必担心路径.因此,根据您的情况,我将其添加到配置中来解决此问题:

paths: {
    "jquery.jstree": "jstree/jquery.jstree"
}

然后我需要它jquery.jstree.

标签:requirejs,javascript,jquery
来源: https://codeday.me/bug/20191122/2059387.html