seajs 源码分析四

这篇主要讲最后的seajs源码运行顺序。固然,前面那些零零碎碎的就直接忽略了,就从module那块开始数组

seajs总的函数调用顺序图以下:app

seajs.use调用后会调用Module.preload,若是有预加载模块的话,就须要先调用Module.use(preloadMods,function(){..},...),来完成模块的预加载,在其完成后再正式调用Module.use(ids,...)函数

mod.load中的resolve函数主要是将mod所依赖的一系列文件路径都计算出来,而后造成数组返回。在load经过循环,逐个的用Module.get获得module实例,而后经过fetch,调用seajs.request获得该文件并执行,因为获得的js文件的话通常有define包裹,define的做用是将factory函数解析,判断其依赖的项目,而后添加的m实例的依赖下,在后面的m.load运行时,就会将这些依赖项目抓取过来,若依赖项目中还有依赖,就会再次进入解析-正则匹配-添加依赖-load抓取。fetch

在一块儿依赖都完成时,就会执行m.onload函数,这个函数在最后会对依赖这个m的module进行逐一检查,分别减去他们的_remain,并判断remain是否等于0,若等于0,就对这个mod执行mod.onload函数。对象

在最后的onload函数中,将每一个依赖的js都进行执行,这是的exec函数会将原来拿到的js文件中产生的module下的factory进行运行,返回的对象会放在exports下,在最后经过callback.apply(global,exports)来将前面获得的对象做为函数参数传入。blog

博客地址:http://www.cnblogs.com/cyITtech/rem

相关文章
相关标签/搜索