gpt4 book ai didi

javascript - 使用 RequireJS Shim 的脚本依赖

转载 作者:行者123 更新时间:2023-11-29 14:55:44 35 4
gpt4 key购买 nike

我正在从 jQuery 1.8 升级到 1.9,因为 jQuery.browser() 被删除了,我将使用 jQuery Browser Plugin .

我的 requirejs 配置文件(使用 data-main=""加载)看起来有点像这样:

(已编辑 - 添加了更多代码片段)

ma​​in-comp.js

require.config({
paths: {
jquery: 'libs/jquery/jquery1.9.1.min',
utils: 'modules/utils',
myController: "controllers/myController",
browserPlugin: 'libs/jquery/jquery.browser.min'
},
shim: {
browserPlugin: {
deps: ['jquery']
}
}
});

require(['myController', 'jquery'], function (controller, $) {
$(controller.start);
}
);

moduls/utils.js

define(['browserPlugin'], function () {
return {
browser: $.browser
};
});

myController.js

define(['utils'], function (utils) {
function start() {
console.log(utils.browser.msie)
}
return {
start: start
};
});

一切似乎都正常工作,但后来我看到有时IE only我得到一个'jQuery' is undefined(这是一个大写 Q)或 '$' is undefined 来自 jquery.browser.min.js 文件的错误。

我认为 deps 意味着 jquery 将在 jquery.browser 文件之前加载,但显然情况并非总是如此。我尝试关注 this answer并添加 exports: "$.fn.browser" 但没有成功。

运行优化版时(minify+uglify using r.js)我没遇到过。

我做错了什么?

最佳答案

您需要确保将 $ 引用为 require 回调中的参数。像这样:

require(['myController', 'jquery'], function (controller, $) {
$(controller.start);
}
);

这确保可以使用 jQuery。这有点奇怪,因为它无论如何都会在全局范围内暴露自己,因此有时它会无论如何工作,但正确的方法是明确要求它并将其作为参数在回调中使用。

关于javascript - 使用 RequireJS Shim 的脚本依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249123/

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