在过去的几天里,我一直在使用Require.JS和SignalR,我注意到当我加载我的站点时,尽管我的require.js配置似乎是正确的,但有时SignalR/Hubs似乎在jquery之前加载。
这是我的配置:
require.config({
paths: {
jQuery: 'libs/jquery/jquery',
Underscore: 'libs/underscore/underscore',
Backbone: 'libs/backbone/backbone',
Marionette: 'libs/backbone/backbone.marionette'
}
});
require([
'app',
'order!libs/jquery/jquery-min',
'order!libs/jQueryUI/jquery-ui-1.8.11.min',
'order!libs/jqGrid/grid.locale-en',
'order!libs/jqGrid/jquery.jqGrid.min',
'order!libs/underscore/underscore-min',
'order!libs/backbone/backbone-min',
'order!Marionette',
'order!libs/jquery.signalR-0.5.1',
'order!noext!signalr/hubs'
], function (app) {
app.initialize();
});当此操作失败时,我会在hubs文件的第16行得到一个错误。上面写的是uncaught TypeError: Cannot read property 'signalR' of undefined。
升级到V2并修改了我的配置。
var fRequire = require.config({
paths: {
jQuery: 'libs/jquery/jquery',
Underscore: 'libs/underscore/underscore',
Backbone: 'libs/backbone/backbone',
Marionette: 'libs/backbone/backbone.marionette',
sigr: 'libs/jquery.signalR-0.5.1'
},
shims: {
"libs/jquery.signalR-0.5.1": {
deps: ["jQuery"]
},
"libs/jqGrid/jquery.jqGrid.min": {
deps: ["jQuery"]
},
"libs/jquery/jquery-ui-1.8.19.min": {
deps: ["jQuery"]
},
"libs/jqGrid/grid.locale-en": {
deps: ["jQuery"]
},
"noext!signalr/hubs": {
deps: ["sigr"]
}
}
});
fRequire([
'app'
], function (app) {
app.initialize();
});现在要求在错误的位置查找jquery,下划线,etc...despite我告诉它具体在哪里查找。也许这与我在配置require v1时遵循了一个旧的教程有关。
http://backbonetutorials.com/organizing-backbone-using-modules/
最终更新:
这是我的工作配置。希望它能帮助像我这样的新手通过这个问题。
require.config({
baseUrl: '/js',
paths: {
"jquery": 'libs/jquery/jquery-min',
"underscore": 'libs/underscore/underscore-min',
"backbone": 'libs/backbone/backbone-min',
"marionette": 'libs/backbone/backbone.marionette',
"sigr": 'libs/jquery.signalR-0.5.1'
},
shims: {
"backbone": {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
"underscore": {
deps: ["jquery"]
},
"marionette": {
deps: ["backbone", "jquery"]
},
"sigr": {
deps: ["jquery"]
},
"libs/jqGrid/jquery.jqGrid.min": {
deps: ["jquery"]
},
"libs/jquery/jquery-ui-1.8.19.min": {
deps: ["jquery"]
},
"libs/jqGrid/grid.locale-en": {
deps: ["jquery"]
},
"noext!signalr/hubs": {
deps: ["sigr"]
}
}
});
// for future ref, I loaded jquery here because app.js references sigr which requires it.
// without enabling it before the module is loaded sigr would complain jquery was not enabled.
require([
'libs/domReady',
'app',
'jquery'
], function (domReady, app, $) {
domReady(function () {
app.initialize();
});
});我必须在函数(domready,app,$)中加载jquery。否则将导致signalr报告找不到它。
发布于 2012-07-14 06:13:02
如果你使用的是Requirejs2.x,你可以使用"shims“配置属性。您可以在其中指定不符合AMD的文件之间的依赖关系,如jquery、jqueryui等。
以您的配置为例:
require.config({
paths: {
jQuery: 'libs/jquery/jquery',
Underscore: 'libs/underscore/underscore',
Backbone: 'libs/backbone/backbone',
Marionette: 'libs/backbone/backbone.marionette'
},
// specify depedencies
shim: {
"libs/jquery.signalR-0.5.1" : {
deps: ["jQuery"]
},
"libs/jqGrid/jquery.jqGrid.min" : {
deps: ["jQuery"]
}
}
});此外,在"shims“中配置依赖项可以避免使用"order!”插件。
提示:使用“路径”为您的系统使用的api设置一个友好的名称,因此当发布新版本的api时,您只需更改“路径”即可完成。
发布于 2013-01-26 10:27:26
只是为了跟进所提供的答案,以及为什么你仍然必须预先包含jQuery...require配置设置是"shim",而不是"shims“。如果没有正确拼写的配置设置,则Require将无法识别和预加载指定的依赖项。最近,我被这件事搞得焦头烂额,还发了一篇文章:http://mikeycooper.blogspot.com/2013/01/requirejs-20-dependencies-seemingly.html
https://stackoverflow.com/questions/11478946
复制相似问题