【发布时间】:2013-03-08 08:05:40
【问题描述】:
在 requirejs 中,你可以定义一个模块而不用按字面设置它的名字,例如:
//in a.js
define([/*deplist*/],function(){
/*do something*/
});
//in b.js
define([/*deplist*/],function(){
/*do something*/
});
并且requirejs会根据他们的文件名(“a”和“b”)设置他们的模块名。
Requirejs 添加您的应用程序需要的所有<script> 标签,它们不是按顺序加载的(正如网络时间线所说)。
当一个名为define 的模块定义自己时,它不知道它的模块名称,然后它把自己放到defQueue 等待初始化。初始化将在加载事件处理函数中完成,因为在事件处理函数中,节点引用是可访问的,并且模块名称记录在节点属性上(如:<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="a" src="./a.js"></script>)。
问题来了,我们无法保证模块调用define的顺序与模块节点load事件触发的顺序一致。那么模块名如何正确映射到模块工厂呢?
【问题讨论】:
标签: javascript requirejs