• YUI 和路径相关的参数与module加载之间的关系


    相关参数默认值

    使用YUI, 我们可以配置一些和路径相关参数,如base、root、comboBase、cdn, combine、path、fullpath等属性的配置均会影响到YUI的module加载, 初始化YUI环境这些参数的默认配置如下:

    module中的定义, 可以在任何可以配置module的地方配置, 以module w-tab为例:
    {module}.path = "w-tab/w-tab.js";
    {module}.fullpath = "http://.../w-tab/w-tab.js";
     
    //种子文件初始化
    YUI.Env = {
        base: 'http://yui.yahooapis.com/',
        cdn: base + Y.version + '/build/',
        ...
    };
     
    //YUI实例化
    Y.Env = {
        base: 'http://yui.yahooapis.com/',
        cdn: base + Y.version + '/build/'
        ...
    };
     
    //getBase 会默认搜索页面上已经添加的script的src, 找到符合以下匹配规则的地址, 然后提取出config.base;
    var _BASE_RE = /(?:?(?:[^&]*&)*([^&]*))?(simpleyui|yui(?:-w+)?)/2(?:-(min|debug))?.js/;
    Y.config.base = YUI.config.base || Y.Env.getBase(_BASE_RE); 
     
    //loader-base _attach
    YUI.Env[Y.version] = Y.Env.meta = {
        base: Y.Env.base,
        root: Y.version + '/',
        comboBase: Y.Env.base + 'combo?',
        ...
    };
     
    //new Y.Loader() => loader
    Y.Env._loader = loader = {
        //default: http://yui.yahooapis.com/{Y.version}/
        base: Y.Env.meta.base + Y.Env.meta.root,  
        //default: http://yui.yahooapis.com/combo? 
        comboBase: Y.Env.meta.comboBase;            
        //看页面上种子文件的使用情况
       combine: Y.config.base && (Y.config.base.indexOf(self.comboBase.substr(0, 20)) > -1),   
       comboSep: '&',
       ...
    }

    从上面可以看到, 和路径有关的参数会存放在很多对象上, 并且也可以有多种方式可以修改这些参数, 看上去太晕了。

    Loader加载使用参数情况

    Loader在加载一个module的时候是如何来处理这些参数的呢? 先看代码吧:

    1、先判断是否需要combine,  逻辑如下, m为某一个module的简写: 

    var groupName = m.group;
    var groupConfig = loader.groups[groupName];
     
    if(groupName && groupConfig) {
        //m是在groups里面配置的
        if (groupConfig.combine && !m.fullpath) {
            m.combine = true;
        }
    } else {
        m.combine = loader.combine;
    }

    2、当 m.combine == true 时,计算comboBase &  comboSep, 将本次批量加载的相同comboBase的mods 使用comboSep 分隔符 join 起来。

    m.comboSep = group.comboSep || loader.comboSep;
    comboBase = group.comboBase || loader.comboBase;
     
    url = ((L.isValue(m.root)) ? m.root : loader.root) + (m.path || m.fullpath);
    //urls为多个combine的module的url数组,如[url, url];
    comboUrl = comboBase + urls.join(m.comboSep);   

    3、当 m.combine == false 时,

    url = m.fullpath || ((group.base || m.base || loader.base || "") + path);
    2、3步骤中的url在配置loader.filter或者groups[groupName].filter的时候, 会再使用filter对url进行一次处理, 主要是支持如下三种filter模式
    FILTER_DEFS: {
        RAW: {
            'searchExp': '-min\.js',
            'replaceStr': '.js'
        },
        DEBUG: {
            'searchExp': '-min\.js',
            'replaceStr': '-debug.js'
        },
        COVERAGE: {
            'searchExp': '-min\.js',
            'replaceStr': '-coverage.js'
        }
    },
    
  • 相关阅读:
    万亿级大数据平台的建设实践
    Java开发中的23种设计模式
    FileZilla更新服务器文件后浏览器没有刷新的一种常见情况
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
  • 原文地址:https://www.cnblogs.com/mininice/p/3914799.html
Copyright © 2020-2023  润新知