我一直在使用RequireJS已经有一段时间了,但我最近遇到了一些我以前从未见过的东西。
我有一个简单的页面,它将使用SelectBoxIt和Caroufredsel。 Caroufredsel需要jQuery。但SelectBoxIt需要jQueryUI(实际上只是小部件工厂)需要jQuery。
我的印象是,设置这些依赖项的方法是使用require.config shim,如下所示:
requirejs.config({
paths: {
"jquery" : [
"//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min",
"libs/jquery-1.8.2.min"
],
jqueryui : "libs/jquery.ui.widget",
selectboxit : "libs/jquery.selectBoxIt.min",
caroufredsel: "libs/jquery.carouFredSel-6.2.1-packed"
},
shim:{
jqueryui: ['jquery'],
selectboxit: ['jqueryui'],
caroufredsel: ['jquery']
}
});
然而,这会产生级联错误:
Uncaught ReferenceError: jQuery is not defined jquery.ui.widget.js:528
Uncaught TypeError: undefined is not a function jquery.selectBoxIt.min.js:4
Uncaught ReferenceError: jQuery is not defined jquery.carouFredSel-6.2.1-packed.js:16
然后有人告诉我有关配置对象的优先级属性:
requirejs.config({
priority: ["libs/jquery-1.8.2.min"],
paths: {
"jquery" : [
"//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min"
, "libs/jquery-1.8.2.min"
]
, jqueryui : "libs/jquery.ui.widget"
, selectboxit : "libs/jquery.selectBoxIt.min"
, caroufredsel: "libs/jquery.carouFredSel-6.2.1-packed"
},
shim:{ // update, removed jquery as it doesn't need shim
jqueryui: ['jquery']
, selectboxit: ['jqueryui']
, caroufredsel: ['jquery']
}
});
每个人都对此感到满意,但感觉不对劲。我原以为放在优先级属性中的字符串将是“jquery”,它将解析为CDN版本或本地版本。
但是这引起了一个新的错误:
GET http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min,libs/jquery-1.8.2.min.js 404 (Not Found)
但是我必须选择在优先级属性中放置哪个不是我在jquery占位符中放入两个项目的目的?
我错过了什么?我以前怎么没见过这个问题?
谢谢, 斯科特
答案 0 :(得分:0)
您向我们展示的内容存在很大问题,可以解释您遇到的问题:
priority
是RequireJS 1.x选项,不被RequireJS 2.x识别。
shim
是RequireJS 2.x选项,RequireJS 1.x无法识别。
如果priority
有所不同,则表明您使用的是RequireJS 1.x,并且您的垫片会被忽略。此外,jQuery 1.8.2不需要填充程序,因为它调用define
。