该方法是 主要的入口点 也是最常用的方法。

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. 第一个参数如果 非数组或字符串, 将判断当前的 请求 是 配置文件请求。

requirejs源码分析: requirejs 方法–1. 主入口的更多相关文章

  1. requirejs源码分析: requirejs 方法–2. context.require(deps, callback, errback);

    上一篇 requirejs源码分析: requirejs 方法–1. 主入口  中的return context.require(deps, callback, errback);  调用的是make ...

  2. requirejs源码分析: define 方法

    define = function (name, deps, callback) {     var node, context; //Allow for anonymous modules     ...

  3. vscode源码分析【七】主进程启动消息通信服务

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  4. 大数据之Oozie——源码分析(一)程序入口

    工作中发现在oozie中使用sqoop与在shell中直接调度sqoop性能上有很大的差异.为了更深入的探索其中的缘由,开始了oozie的源码分析之路.今天第一天阅读源码,由于没有编译成功,不能运行测 ...

  5. requirejs源码分析: 路径

    1. 没有设置baseUrl(一般我们都会设置baseurl)        在没有设置baseUrl时, 默认  baseurl: "./"        当指定data-mai ...

  6. requirejs源码分析: config中shim

    shim处理的源码: //Merge shim                 if (cfg.shim) {                     eachProp(cfg.shim, funct ...

  7. mybatis源码分析(方法调用过程)

    十一月月底,宿舍楼失火啦,搞得20多天没有网,目测直到放假也不会来了... 正题 嗯~,其实阅读源码不是为了应付面试,更重要的让你知道,大师是怎样去写代码的,同样是用Java,为啥Clinton Be ...

  8. 从源码分析 MGR 的新主选举算法

    MGR 的新主选举算法,在节点版本一致的情况下,其实也挺简单的. 首先比较权重,权重越高,选为新主的优先级越高. 如果权重一致,则会进一步比较节点的 server_uuid.server_uuid 越 ...

  9. Yii2源码分析(一):入口

    写在前面,写这些随笔是记录下自己看Yii2源码的过程,可能会有些流水账,大部分解析放在注释里说明,由于个人水平有限,有不正确的地方还望斧正. web入口文件Index.php // 定义全局的常量,Y ...

随机推荐

  1. 在CTreeCtrl控件点击事件中获取点击的项

    网上搜了一下,有两种方法: 1.使用GetSelectedItem() HTREEITEM hItem = m_treeCtrl.GetSelectedItem(); CString strText ...

  2. codeblocks如何watch数组

    codeblocks13.12+GDB 调试的时候,main传了一个int a[10]给quicksort 但是在quicksort内部,debugger把a看成一个pointer而不是array,所 ...

  3. Havel--Hakimi定理推断可图化 python

    介绍: 哈维尔[1955]--哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的. 哈维尔[1955]--哈吉米[1962]定理: 对于N > 1,长度为N的度序列d可以可图化当且仅当 ...

  4. Python tkinter 用键盘移动没反映修改代码

    from tkinter import *   def movetriangle(event):     if event.keysym == 'Up':         canvas.move(a1 ...

  5. 如何在GitHub上删除某个文件夹?

    步骤: (以删除.idea文件夹为例) git rm -r --cached .idea #--cached不会把本地的.idea删除 git commit -m 'delete .idea dir' ...

  6. atom安装插件

    1. 由于墙的原因,在界面中安装不了 先安装 npm 可以下载node.js桌面版命令行 2.打开命令行中进入atom的安装目录,进入到packages 中 3. 进入github 官网 输入你要下载 ...

  7. html中div获取焦点,去掉input div等获取焦点时候的边框

    经测试只有在IE chrome才会在获取焦点时有边框 使用CSS div{ outline:none; } DIV焦点事件详解 --[focus和tabIndex]​ 摘自:http://my.osc ...

  8. ROC 准确率,召回率 F-measure理解(转载)

    ROC曲线.AUC.Precision.Recall.F-measure理解及Python实现   原文连接:http://www.cnblogs.com/haoguoeveryone/p/haogu ...

  9. Laravel 5.1 数组帮助函数(随发现更新)

    array_add 向一个数组中添加指定键值,如果键值不存在则添加,如果键本身就存在 那么就不添加: $test_array = ['name' => '大K', 'age' => 27] ...

  10. NewtonSoft.Json NULL转空字符串

    from:http://www.cnblogs.com/hetuan/articles/4565702.html NewtonSoft.Json对需要转为JSON字符串的对象的NULL值以及DBNul ...