我在我当前的项目中使用requirejs,但有时它不会加载依赖模块并抛出错误“jQuery”未定义...它总是不会发生...如果我刷新页面然后它工作正常。我尝试增加waitSeconds但没有成功。
这里:
require.config({
paths: {
'jquery': 'lib/jquery-1.10.2.min',
'async': 'lib/async',
'slider': 'lib/jquery.bxslider.min',
'fixed-scroll': 'lib/iscroll',
'validation': 'validation-framework',
'main-nav': 'main-nav',
'global': 'global',
'page-animate': 'page-details-animation',
'details': 'page-details',
'pageMap': 'map'
},
shim: {
'jquery': {
exports: '$'
},
'details': {
deps: ['jquery']
},
'page-animate': {
deps: ['jquery'],
exports: 'pageAnimate.init'
},
'slider': {
deps: ['jquery'],
exports: 'bxSlider'
},
'fixed-scroll': {
exports: 'iScroll'
},
'validation': {
deps: ['jquery']
}
}
});
require(['jquery', 'fixed-scroll', 'page-animate', 'main-nav', 'global', 'details', 'slider', 'pageMap', 'validation'], function () {
$('.page-details').pageDetails();
});
答案 0 :(得分:3)
根据您报告的错误以及我在问题中看到的内容判断,我建议'details'
需要一个垫片:
shim: {
[...]
'details': [ 'jquery' ]
}
我推断这是由于$('.page-details').pageDetails()
,pageDetails
必须由jQuery插件提供,并且该插件看起来像(根据使用的名称)将RequireJS声明为{的模块{1}}。您获得的错误与此插件未正确填充一致。一个jQuery插件需要加载jQuery才能自行安装,因此需要依赖。
其他有待了解但不参与错误的事情:
jQuery 1.10.x不需要填充。至少从1.8开始就是如此。要求它为'details'
(全部小写),你会没事的。
您应该使用'jquery'
模块的值,而不是依赖全局'jquery'
。所以,不要这样做:
$
但是具有与 require(['jquery', ...], function () {
$.whatever();
});
模块对应的名为$
的函数参数:
'jquery'
如果您曾使用require(['jquery', ...], function ($) {
$.whatever();
});
或需要支持多个版本的jQuery(如果您使用需要特定版本的第三方库,则可能会发生这种情况),这将使您的生活更轻松。