require 下面有几大属性
配置Context
我把context叫做一个命名空间,因为每一个context都有一个名字,这样同名而功能不同的模块就可以放在不同的context中以防冲突。
如果开发人员没有配置context,那么,requirejs还会生成一个默认的context,这个默认的context配置大致如下:
requirejs.config({
context: "_", // default context name
baseUrl: "./",
waitSeconds:7, // how long canloading last
paths: {
},
bundles: {
},
pkgs: {
},
shim: {
},
config: {
}
});
注意:在不指定context名称的情况下,任何配置和调用都是针对默认context的修改和调用。
空间名称 – context
如果requirejs初始化时自定义配置context,那么默认创建的context的name 就是”_”。如果需要添加新的context,只需指定一个新的contextName即可,比如下面这个调用就会创建一个新的context:
requirejs({
context:”new content name”});
同名的context只会有一个,配置同名的context等于修改这个context的属性。
加载超时 – waitSeconds
每个context都配置了一个加载超时的时间,某个模块如果没有初始化,加载的时间又超过了这个时间,就会被认为加载失败。
加载超时是针对整个context下的所有模块而言的,而不是单指某个模块,也就是说这个默认的7秒是指所有模块应该在7秒之内全部加载完成。7秒之后,如果有没有被加载的模块,将抛出error指示哪些模块没有加载。(requirejs每隔50毫秒做一次判断)。
基准URL – baseUrl
每个context的基准URL默认值是”./”。
第一个context的基准URL
如果开发人员没有指定context名称,那么这个第一个context就是requirejs默认生成的context,否则就是开发人员自己定义的context。在不指定基准URL的前提下,第一个context的基准URL设定比较特殊,除了标准的设定方法(参考后面的基准URL标准设定方法),还可以使用以下两种特殊方式设置:
第一种:通过requirejs或require对象配置
在确认requirejs脚本之前没有其它requirejs执行过的前提下:
或
注意:通过这种方式设置基准URL,data-main指定的脚本文件位置也会变成相对于基准URL的路径,因为data-main指定的脚本本身只是依赖的关系之一。而且,data-main指定的脚本也属于第一个context。
比如下面这种情况:
<script>requirejs={
baseUrl: 'scripts/lib'}</script>
<script data-main="scripts/app.js"src="../require.js"></script>
脚本模块app.js的最终路径变成了"scripts/lib/scripts/app.js",不是原来的"scripts/app.js",而且它的依赖名称也会变为scripts/lib/scripts/app(requirejs默认会去掉脚本路径的最后一个“.js”,除非data-main的值以“/”开头,或包含“:”,或包含“?”)。
第二种:根据script元素的data-main属性指定的脚本路径计算
如果没有设定baseUrl,requirejs会根据script元素data-main属性指定的JavaScript文件路径计算出一个基准URL。
比如data-main="scripts/app.js",那么baseUrl就是"scripts/":
<script data-main="scripts/app.js"src="../require.js"></script>
基准URL标准设定方法
除了第一个context可以使用上面的方法,其它自定义的context配置baseUrl就只能使用下面这两种方法。但这两种方法同样也可以用来修改第一个context的属性,在不指定context名称的情况下,