Javascript require.js不正确地加载依赖项

Javascript require.js不正确地加载依赖项,javascript,jquery,requirejs,Javascript,Jquery,Requirejs,这就是设置,我的基本文件是main.js,它定义了我正在构建的站点的所有页面上需要的脚本。看起来是这样的: define([ '/javascript/requirePlugins/require-order.js!http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', '/javascript/requirePlugins/require-order.js!/javascript/jqu

这就是设置,我的基本文件是main.js,它定义了我正在构建的站点的所有页面上需要的脚本。看起来是这样的:

define([
        '/javascript/requirePlugins/require-order.js!http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
        '/javascript/requirePlugins/require-order.js!/javascript/jquery-global-plugins.js',
        '/javascript/requirePlugins/require-order.js!/javascript/globals.js'
    ], function () {
        loadFonts();
    }
);
    require(['/javascript/requirePlugins/require-order.js!/main','/javascript/requirePlugins/require-order.js!/javascript/3rdparty/lemon-slider-0.2.js'], function () {
        $j('#carousel<%= ClientID %>').lemmonSlider({loop:false});
    });
它加载jQuery、一些插件和globals脚本文件。在一个页面上,我试图加载jQuery插件,但该插件试图在加载jQuery之前加载。看起来是这样的:

define([
        '/javascript/requirePlugins/require-order.js!http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
        '/javascript/requirePlugins/require-order.js!/javascript/jquery-global-plugins.js',
        '/javascript/requirePlugins/require-order.js!/javascript/globals.js'
    ], function () {
        loadFonts();
    }
);
    require(['/javascript/requirePlugins/require-order.js!/main','/javascript/requirePlugins/require-order.js!/javascript/3rdparty/lemon-slider-0.2.js'], function () {
        $j('#carousel<%= ClientID %>').lemmonSlider({loop:false});
    });
require(['/javascript/requirePlugins/require order.js!/main','/javascript/requirePlugins/require order.js!/javascript/3rdparty/lemon-slider-0.2.js'],函数(){
$j('#carousel')。lemmonSlider({loop:false});
});
函数似乎没有按照请求的顺序执行。我不确定我是否可以嵌套这样的有序函数。我还尝试将jQuery作为依赖项应用,但这也失败了:

    require(['/javascript/requirePlugins/require-order.js!/jquery','/javascript/requirePlugins/require-order.js!/javascript/3rdparty/lemon-slider-0.2.js'], function () {
        $j('#carousel<%= ClientID %>').lemmonSlider({loop:false});
    });
require(['/javascript/requirePlugins/require order.js!/jquery','/javascript/requirePlugins/require order.js!/javascript/3rdparty/lemon-slider-0.2.js'],函数(){
$j('#carousel')。lemmonSlider({loop:false});
});

如果您对我的错误有任何建议,我们将不胜感激,谢谢您也许应该尝试使用require jquery:


这样,您就不必担心何时加载jquery了。

如果您只需要按顺序加载一些顶级脚本,而这些脚本不使用requirejs支持的模块API,那么order插件非常有用。如果混用它/使用它来加载确实使用define()模块API的模块,效果就不太好

特别是,order只是确保首先加载脚本。但是,define()API指定要加载的其他脚本,order插件不知道如何等待这些脚本加载

对于这个特殊的问题,我建议使用sinsedrix建议的require-jquery.js。或者包装在define()调用中使用的脚本。可以通过其amdify命令帮助您执行此操作:

volo.js amdify path/to/lemon-slider-0.2.js depends=jquery
此外,我将设置baseUrl,并对依赖项使用“模块命名”,而不是完整路径。这将允许优化器正常工作。您还可以将“order”映射到requirePlugins路径,这有助于减少一些线路噪声。我还将创建一个“jquery”路径条目,这样,如果在define调用中包装其他插件,它将映射回main.js文件中加载的jquery。因此,在页面的顶级脚本中:

requirejs.config({
    baseUrl: '/javascript/',
    paths: {
        order: 'requirePlugins/require-order',
        jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'
    }
});
然后您的main.js可以这样编写:

define([
        'order!jquery',
        'order!jquery-global-plugins',
        'order!globals'
    ], function () {
        loadFonts();
    }
);
请注意,在这里,只要这些依赖项本身不调用define(),订单的用法就可以了


但是,如果您正在包装您在define调用中使用的脚本,那么您就可以取消订单了!用法同上。保持jquery路径配置。

顺序插件被删除,您可以尝试按顺序加载插件

requirejs.config({
   paths: {
        'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min',
        'bootstrap': '../bootstrap/js/bootstrap.min',
        'select2': 'vendor/select2',
        'jshashtable': 'vendor/jshashtable-2.1',
        'jquery.numberformatter': 'vendor/jquery.numberformatter-1.2.3.min',
        'jq-datepicker': 'vendor/bootstrap-datepicker',
        'jq-datepicker.da': 'vendor/bootstrap-datepicker.da'
    }, 

    // Use shim for plugins that does not support ADM
    shim: {
        'bootstrap': ['jquery'],
        'select2': ['jquery'],
        'jq-datepicker': ['jquery'],
        'jshashtable': ['jquery'],
        'jquery.numberformatter': ['jquery', 'jshashtable']
    },
    enforceDefine: true
});
编辑:


require jquery也不再维护。

这只解决了加载jquery时的问题。这并不能解决我的主要问题,也就是我做错了什么,这对于其他的依赖者来说是件好事,所以它取得了进展。现在你应该简化你的可读性问题(路径),也许还有依赖关系的图形图像。@jrburke,路径的用途是什么?为什么我不能只需要jquery并在回调中使用它呢。为什么我必须将jquery添加到配置路径才能使其工作。我希望能够要求([“lib/jquery”]、函数($){$(“#app main”).html(“jquery已加载”);};让它工作。这不起作用。@kr1zmo:jQuery注册为名为“jQuery”的命名模块,因此您请求的依赖项必须称为“jQuery”。此外,通过使用路径条目,它允许您在构建过程中将其映射到不同的文件。另外,如果您引入更多自己的模块,使用较短的“jquery”名称也不错。