/ / erro de ordem de carregamento do script - require.js - jquery, backbone.js, requirejs

erro de ordem de carregamento do script - require.js - jquery, backbone.js, requirejs

Na carga inicial do aplicativo depois de limpar meucache eu recebo um jquery é indefinido bc o aplicativo está tentando carregar jquery validar antes de jquery ter carregado. Depois de uma atualização, tudo é carregado e funciona bem. Eu pensei que eu configurei corretamente, mas estou faltando alguma coisa? Usando backbone.js, require.js e jquery.

Main.js:

require.config({
paths: {
"jquery": "libs/jquery/jquery-min",
"underscore": "libs/underscore/underscore-min",
"backbone": "libs/backbone/backbone-min",
"validate": "jquery.validate-1.11.1.min",
"templates": "../templates"
},

shim: {
jquery: {
exports: "jquery"
},
underscore: {
exports: "_"
},
backbone: {
deps: ["underscore", "jquery"],
exports: "backbone"
},
validate: {
deps: ["jquery"],
exports: "validate"
}
},

});

require([
"app"

], function(App){
App.initialize();
});

App.js

define([
"jquery",
"underscore",
"backbone",
"validate",
"router",
"scripts"
], function($, _, Backbone, validate, Router, scripts){
var initialize = function(){
Router.initialize();
};

return {
initialize: initialize
};
});

Aqui está o que eu atualizei os arquivos, mas ainda sem sorte:

require.config({
paths: {
"jquery": "libs/jquery/jquery-min",
"underscore": "libs/underscore/underscore-min",
"backbone": "libs/backbone/backbone-min",
"validate": "jquery.validate-1.11.1.min",
"templates": "../templates"
},

shim: {
underscore: {
exports: "_"
},
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
validate: {
deps: ["jquery", "backbone"],
exports: "validate"
}
}

});

require([
"app"
], function(App){
App.initialize();
});

App.js

    define([
"jquery",
"underscore",
"backbone",
"validate",
"router",
"scripts"
], function($, _, Backbone, validate, Router, scripts){
var initialize = function(){
Router.initialize();
};

return {
initialize: initialize
};
});

Respostas:

1 para resposta № 1

jquery validate como visto daqui é um plugin que está sendo chamado por $ .validate ().

Nesses casos, você não precisa fazer nenhuma exportação.

Você pode tentar e ver se isso é útil para você:

   shim: {
validate: {
deps: ["jquery"]
}
}

Você também pode ver uma pergunta de stackoverflow semelhante para referência: Como fazer um plugin jQuery carregável com requirejs


0 para resposta № 2

De onde você tira o eror? Você pode colar um stacktrace?

Também vale a pena conferir a URL do jquery. Digite seu url de jquery (terminando em "libs / jquery / jquery-min") em seu navegador e veja se ele pode ser encontrado.


0 para resposta № 3

exports deve ter o mesmo tipo de caso esperado por scripts de terceiros. Nesse caso: jQuery e Backbone

require.config({
paths: {
"jquery": "libs/jquery/jquery-min",
"underscore": "libs/underscore/underscore-min",
"backbone": "libs/backbone/backbone-min",
"validate": "jquery.validate-1.11.1.min",
"templates": "../templates"
},
shim: {
jquery: {
exports: "jQuery"
},
underscore: {
exports: "_"
},
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
validate: {
deps: ["jquery"],
exports: "validate"
}
},
});

0 para a resposta № 4

o exports a propriedade precisa corresponder ao nome da propriedade global - no caso do jQuery, ela precisa ser $ ou jQuery. Para o backbone, ele precisa ser Backbone.

Você também não precisa ser shimmer jQuery - tem sido compatível com a AMD por um bom tempo através de um nome definido. Vejo https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17


-3 para a resposta № 5

Obrigado pelas respostas, tenho certeza que seu feedbackresolvi algumas outras questões que eu teria tido. Parece que eu estava usando uma versão muito antiga do require.js 0.27.0 e atualizando para o último problema corrigido do jquery.