requirejs、require方法冲突
如果加载了多个requirejs脚本,每个requirejs会判断是否浏览器已经实现了require和define方法。如果浏览器已经自带require和define方法,或者之前已经有一个requirejs脚本执行,那么这个requirejs就会立刻停止执行。所以,即使页面上加载了多次requirejs脚本也不会有什么问题。
配置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执行过的前提下:
<script>requirejs={baseUrl: './'}</script>
<script data-main="scripts/a