读 requirejs 相关细则

一、requirejs初始化执行流程
 
1 if (isBrowser)
2 req(cfg)
3 context.configure()
4 context.require(cfg.deps || [], cfg.callback)
5 resume()
6 req.load
7 req.attach(url, context, moduleName);
 
二、require()细节
 
1 可通过require.config方法配置baseUrl
2 文件名一般不用加".js",如果有".js"文件一定是与引入requirejs的html在同一个目录
 
 
三、够狠,一个newContext方法,有1k多行
 
四、require流程
 
1 require([xx], fn)
2 context.require(deps, callback, relModuleMap)
3 main(null, deps, callback, relModuleMap);
4 makeModuleMap(depArg, (name ? moduleMap : relModuleMap)) 每次调用生成 module对象
{
prefix:
name:
parentMap:
url:
originalName:
fullName:
}
5 getManager(map, shouldQueue) 生成的manager结构如下
manager = {
id:
map: map, // 为上面makeModuleMap结构
depCount: 0,
depDone: [],
depCallbacks: [],
deps: [],
listeners: [],22722
add: managerAdd
};
6 resume()
7 req.load(context, fullName, url);
8 req.attach(url, context, moduleName);
9 req.addScriptToDom(node);
 
callback
1 req.onScriptLoad
2 context.completeLoad(moduleName);
3 callDefMain
4 main(name, deps, callback)
5 execManager(manager)
6
 
五、configurePackageDir函数在context.configure调用。即配置requirejs时。
 
六、context.defined 中存储各个模块
 
 
十、瑕疵
1 requirejs/define/resume 多余的 return undefined
2 req.execCb 多余的参数name
3 forceExec/checkLoaded return undefined 改为 return; 最后的return undefined去掉
 
 
十一、剃掉的
1 isBrowser 非浏览器环境的支持
2 r.js 相关代码
3 requireWait 标示符 / 佳璐说是模拟script的load
4 queueDependency 内仅一行,仅被调用一次(getManager中)

转载于:https://www.cnblogs.com/litao229/archive/2012/04/13/2446194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值