Jquery 脚本加载顺序错误-require.js

Jquery 脚本加载顺序错误-require.js,jquery,backbone.js,requirejs,Jquery,Backbone.js,Requirejs,在清除缓存后首次加载应用程序时,我得到一个jquery未定义bc,应用程序试图在加载jquery之前加载jquery验证。刷新后,所有内容都加载并正常工作。我以为我设置正确,但我遗漏了什么吗?使用backbone.js、require.js和jquery Main.js: require.config({ paths: { 'jquery': 'libs/jquery/jquery-min', 'underscore': 'libs/underscore/underscore

在清除缓存后首次加载应用程序时,我得到一个jquery未定义bc,应用程序试图在加载jquery之前加载jquery验证。刷新后,所有内容都加载并正常工作。我以为我设置正确,但我遗漏了什么吗?使用backbone.js、require.js和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
};
});
    define([
  'jquery', 
  'underscore', 
  'backbone',
     'validate',
    'router',
    'scripts'
], function($, _, Backbone, validate, Router, scripts){
  var initialize = function(){
Router.initialize();
  };

 return { 
    initialize: initialize
  };
});
以下是我已将文件更新到的内容,但仍然运气不佳:

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
};
});
    define([
  'jquery', 
  'underscore', 
  'backbone',
     'validate',
    'router',
    'scripts'
], function($, _, Backbone, validate, Router, scripts){
  var initialize = function(){
Router.initialize();
  };

 return { 
    initialize: initialize
  };
});

你从哪里弄到的?你能粘贴一个stacktrace吗


同样值得检查的是jquery的url。在浏览器中键入jquery的url(以'libs/jquery/jquery-min'结尾),然后查看是否可以找到它。

导出
必须具有第三方脚本所期望的相同类型大小写。在这种情况下:
jQuery
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"
        }
    },
});

exports
属性需要与全局属性名称匹配-对于jQuery,它需要是
$
jQuery
。对于主干,它需要是
主干


您也不需要填充jQuery——它通过命名的define与AMD兼容了很长一段时间。请参见

jquery validate,从这里可以看到,$.validate()调用了一个插件

在这种情况下,您不需要进行任何导出

您可以尝试看看这是否对您有帮助:

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

您还可以看到一个类似的stackoverflow问题供参考:

谢谢您的回复,我相信您的反馈修复了我可能遇到的其他一些问题。看起来我使用的是一个非常旧的require.js 0.27.0版本,并升级到最新版本,修复了jquery问题。

我检查了firebug html,看起来脚本的加载顺序正确-require、main、app、jquery、下划线、主干、,验证,但我仍然得到验证插件上的jquery是未定义错误。感谢您的回复,更改了导出,似乎没有任何效果。您是否删除了浏览器缓存?是的,甚至双击了正在加载最新版本的firebug。我肯定我忽略了一些简单的东西。你能在
validate
source的开头设置一个断点吗?也许你可以看看那里的globals并从中推断出其他东西谢谢,更新了属性名并删除了jquery垫片,但仍然没有运气