gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:45:27 25 4
gpt4 key购买 nike

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

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

我首先加载我的 RequireJS shim 配置,然后调用初始的 '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。我还为两个插件定义了依赖关系。 注意:我试过使用更明确的 shim 声明,包括定义导出。我发现效果没有差异。

定义我的配置后,我调用:

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 shim 配置的核心机制?

更新 1: 这似乎与我从路径加载 jquery.jstree 这一事实有关。如果我加载另一个空文件 (jstree/jquery.test)——我可以解决这个问题。但是,如果我随后将测试向上移动到一个目录,使其与其他插件处于同一水平——它都可以正常加载。

最佳答案

您为 shim 配置提供的整个路径必须与您需要的模块的整个路径相匹配。

您将 shim 命名为 jquery.jstree 但您需要将其命名为 jstree/jquery.jstree,因此 RequireJS 不使用 shim,因此不知道该插件取决于 jquery 等,因此您会遇到间歇性错误。

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

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

然后我需要它 jquery.jstree

关于javascript - 使用 RequireJS 加载 jQuery 插件——即使在指定 deps 之后,jQuery 也会间歇性地未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com