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

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. python模块学习之json

    更多信息请参考官网地址: https://docs.python.org/3.6/library/json.html 19.2. json - JSON编码器和解码器 Source code: Lib ...

  2. layui表格渲染中模板的使用举例

    实例一: { field: 'status', align: 'center', title: '活动状态', templet: function (d) { if (d.status == &quo ...

  3. 如何获取UA

    function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.val ...

  4. 参数化--每个vuser使用不同的参数值

    使用controller并发时,每个vuser从参数文件中取一个值,设置如下图:

  5. cmake工程使用distcc

    distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ...

  6. php tp验证表单与自动填充函数

    <?php class FormModel extends Model { // 自动验证设置 /* * 一:自动验证 自动验证的定义是这样的:array(field,rule,message, ...

  7. jetty端口灵活配置方法

    在使用maven开发web项目极大地方便了jar包的依赖,在测试时也可以集成Servlet容器,从启动速度和量级上看,Jetty无疑是不二选择. 如果多个项目同时启动,就会端口冲突了. 一种办法是通过 ...

  8. 微信 oauth 授权3

    3. 请求 2的url会得到 { "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2Cot ...

  9. Editor编辑器的一些用法

    共有两个脚本,一个是有关Inspector面板的,一个是window的 using UnityEngine; using System.Collections; using UnityEditor; ...

  10. 线程中sleep和wait区别

    sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法. 3 ...