zoukankan      html  css  js  c++  java
  • requirejs源码分析: requirejs 方法–1. 主入口

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

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

  • 相关阅读:
    《程序设计与数据结构》(上)课程总结
    20172321 2017-2018-2 《程序设计与数据结构》实验五报告
    20172321 2017-2018-2 《程序设计与数据结构》实验4报告
    20172321 2017-2018-2 《程序设计与数据结构》第11周学习总结
    暑假App
    20172314 2018-2019-1《程序设计与数据结构》查找与排序实验报告
    团队作业——第二周
    安卓游戏开发——团队作业第一周
    20172314 2018-2019-1《程序设计与数据结构》第九周学习总结
    20172314 《程序设计与数据结构》实验报告——树
  • 原文地址:https://www.cnblogs.com/chencidi/p/5677935.html
Copyright © 2011-2022 走看看