Javascript RequireJS有缺陷吗?

Javascript RequireJS有缺陷吗?,javascript,requirejs,Javascript,Requirejs,查看RequireJS,但与Head.JS不同,它以不确定的顺序下载,但以确定的顺序计算,RequireJS似乎有所不同 通常,RequireJS加载并以不确定的顺序计算脚本 然后它展示了如何为订单添加前缀!对脚本名称进行显式排序等 然后在示例中: require(["jquery", "jquery.alpha", "jquery.beta"], function($) { //the jquery.alpha.js and jquery.beta.js plugins have be

查看RequireJS,但与Head.JS不同,它以不确定的顺序下载,但以确定的顺序计算,RequireJS似乎有所不同

通常,RequireJS加载并以不确定的顺序计算脚本

然后它展示了如何为订单添加前缀!对脚本名称进行显式排序等

然后在示例中:

require(["jquery", "jquery.alpha", "jquery.beta"], function($) {
    //the jquery.alpha.js and jquery.beta.js plugins have been loaded.
    $(function() {
        $('body').alpha().beta();
    });
});
所以,如果jquery.alpha在jquery之前被下载和评估,那么这肯定会导致问题吗?忘记任何客户机代码的使用,比如上面的函数体,如果像大多数附加到jQuery.fn的插件一样,那么在评估阶段,jQuery将在这个场景中未定义


我错过了什么

你是对的,如果没有什么帮助,异常就会发生。好消息是RequireJS有一个订单插件来帮助实现这一点

我目前正在评估RequireJS

下面是我的一个文件示例:
“命令!”命令将按顺序为您加载文件。您可以(然后)使用回调加载其他(支持)文件


require([“Loaders/RequireJS/order!。//Includes/JavaScript/jQuery/Core/jQuery-1.3.2.js”,
“Loaders/RequireJS/order!。//Includes/JavaScript/jQuery/Core/jQuery.tools.min.js”,
“Loaders/RequireJS/order.//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.tmpl.js”],函数(){
需要([“//Includes/JavaScript/jQuery/jGeneral.js”,
“//Includes/JavaScript/jQuery/autocomplete.js”,
“//Includes/JavaScript/jQuery/jQuery.ErrorWindow.js”,
“//Includes/JavaScript/jQuery/jQuery.ValidationBubble.js”,
“//Includes/JavaScript/jQuery/jQuery.Tootltip.js”,
“//Includes/JavaScript/jQuery/jQuery.Extensions.js”,
“//Includes/JavaScript/jQuery/jQuery.Toaster.js”],null);
require([“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.dimensions.js“,
“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.Color.Animations.js”,
“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.corners.min.js”,
“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.tipsy.js”,
“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.numberformatter-1.1.0.js”,
“//Includes/JavaScript/jQuery/ThirdPartyPlugIns/jQuery.tipsy.js”],null);
});
老实说:

我很难找到一个能满足我所有需要的。我还发现每一个都缺少文档。

RequireJS的设计目的不是加载普通javascript,而是加载定义的模块。模块格式如下所示:

define(['a', 'b'], function(a, b) {
    return { zzz: 123 };
});
需要注意的重要一点是,所有模块代码都在匿名函数中。因此,如果文件以任意顺序运行,这无关紧要,因为它所做的只是注册模块。模块代码然后按依赖关系顺序运行,返回值成为模块对象,该对象作为参数传递给使用该模块的代码


如果您试图加载普通文件,这将无法正常工作。在这种情况下,有一个
order
插件可以强制加载顺序。

应该注意的是,该示例使用了打包在一起的定制版本“requirejs和jquery”,我相信这意味着jquery总是首先可用的

如果您有问题,您可以始终将插件包装在模块定义中,并确保它们依赖于jquery本身,再次确保顺序正确:

/* SPECIAL WRAPPING CODE START */
define(['jquery'], function(jQuery) {


// .... plugin code ....


/* SPECIAL WRAPPING CODE END */
});

您应该通过指定路径来配置requirejs,这样就不必编写那些长URL。例子:
/* SPECIAL WRAPPING CODE START */
define(['jquery'], function(jQuery) {


// .... plugin code ....


/* SPECIAL WRAPPING CODE END */
});