调查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之前下载并评估了jquery.alpha,那么这肯定会导致问题吗?忘记任何客户端代码使用,例如上面的函数体,如果像大多数插件一样,它们附加到jQuery.fn然后在评估阶段,则jQuery将在此场景中未定义。
我在这里缺少什么?
答案 0 :(得分:18)
RequireJS不是为加载普通javascript而设计的,而是加载已定义的模块。模块格式类似于:
define(['a', 'b'], function(a, b) {
return { zzz: 123 };
});
需要注意的重要一点是,所有模块代码都在匿名函数中。因此,如果文件以任意顺序运行,则无关紧要,因为它只是注册模块。然后模块代码以依赖顺序运行,返回值变为模块对象,它作为参数传递给使用该模块的代码。
如果您尝试加载纯文件,这将无法正常工作。在这种情况下,有order
插件强制加载订单。
答案 1 :(得分:1)
应该注意的是,该示例使用自定义版本的“requirejs和jquery”打包在一起,我相信这意味着jquery将始终可用。
如果您遇到问题,可以随时将插件包装在模块定义中,并确保它们依赖于jquery本身,再次确保订单正确:
/* SPECIAL WRAPPING CODE START */
define(['jquery'], function(jQuery) {
// .... plugin code ....
/* SPECIAL WRAPPING CODE END */
});
答案 2 :(得分:0)
你是对的,没有什么可以帮助顺序发生异常。好消息是RequireJS有一个Order插件来帮助解决这个问题。
我目前正在评估RequireJS ......
以下是我的一个档案示例:
命令!'命令将按顺序为您加载文件。您可以(然后)使用回调来加载其他(支持)文件。
<script src="Loaders/RequireJS/requireJS.js" type="text/javascript"></script>
<script src="Loaders/RequireJS/order.js" type="text/javascript"></script>
<script type="text/javascript">
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"], function() {
require(["././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);
});
</script>
诚实:
我looking at various asynchronous resource-loaders而且我很难找到能满足我所需要的一切。我也发现每个文档缺少文档。