您的位置:首页 > 产品设计 > UI/UE

requirejs源码分析: requirejs 方法–1. 主入口

2016-07-17 09:58 369 查看
该方法是 主要的入口点 也是最常用的方法。


req = requirejs = function (deps, callback, errback, optional) {

//Find the right context, use default
var context, config,
contextName = defContextName;

//这里判断当前的require是否为config请求
//deps不是数组 和 字符串时。
//将第一个参数设置为config
// Determine if have config object in the call.
if (!isArray(deps) && typeof deps !== 'string') {
// deps is a config object
config = deps;
if (isArray(callback)) {
// Adjust args if there are dependencies
deps = callback;
callback = errback;
errback = optional;
} else {
deps = [];
}
}

//自定义配置文件的语法上下文 名称
if (config && config.context) {
contextName = config.context;
}

//不存在 上下文时,生成一个上下文实例
context = getOwn(contexts, contextName);
if (!context) {
context = contexts[contextName] = req.s.newContext(contextName);
}

//当前为配置信息请求时,
//对信息的初始化
if (config) {
context.configure(config);
}

return context.require(deps, callback, errback);
};


该方法代码比较短。 但 内容里的 调用的方法 是比较复杂的。

主要流程:

1. 创建 上下文 实例。

context = contexts[contextName] = req.s.newContext(contextName);

每一个请求都会有一个 上下文 实例,可以理解为封装到一个对象里,进行统一管理。

2. 利用 上一步 生成的 上下文 实例, 加载模块。

return context.require(deps, callback, errback);


部分源码分析:

1.

if (config) {
context.configure(config);
}

这里主要是配置信息进行初始化处理。baseUrl,shim 加工补充等。

其他:

1. 第一个参数如果 非数组或字符串, 将判断当前的 请求 是 配置文件请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: