例子来自官方,我稍微改造了一下,如下:
|
三个文件,运行结果 "util.js is loaded" -> "main factory"。
data-main 属性有一个值 "scripts/main",表示当 require.js 加载完之后加载 scripts/main.js。
其实不仅如此,如果指定了这个属性,会把它的目录部分和文件部分拆开,即 scripts/ 和 main,之后会这么做:
cfg.baseUrl = ‘scripts/‘;
cfg.deps = [‘main‘];
即配置一下 baseUrl 和 deps
接着,用这个配置对象去初始化默认Context,这个过程会判断默认Context 是否依赖别的模块,这里明显依赖 "main",所以需要context.require(it)
1. 把需要加载的依赖放进一个数组
2. 遍历该数组,加载依赖,并轮询加载状态
append 的 script 节点需要提一下:
可以看到 RequireJS 为节点加了两个自定义属性,分别表示 contextName 和 moduleName
动态创建的 script 节点当脚本执行完后,会发出onload事件(IE 就是 onreadstatechange),RequireJS 这时会在事件处理函数中进行检测,加载的模块是否同时也存在依赖?来看一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
|