相关参数默认值

使用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 = /(?:\?(?:[^&]*&)*([^&]*))?\b(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'
}
},

YUI 和路径相关的参数与module加载之间的关系的更多相关文章

  1. spring 配置参数从配置文件中加载到PropertiesFactoryBean 和配置参数从数据库加载到PropertiesFactoryBean 的实现,及项目中的相关应用

    1.加载.properties文件中的配置参数加载到PropertiesFactoryBean容器中 <bean id="configProperties" class=&q ...

  2. module加载过程初步分析[更新中]【转】

    转自:http://blog.chinaunix.net/uid-1817735-id-2837068.html 分析这个过程可以有助于我们认识在加载模块时出现的问题大抵在哪里了. 直接从sys_in ...

  3. 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式

    渐进式jpeg(progressive jpeg)图片及其相关   一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...

  4. bootm命令中地址参数,内核加载地址以及内核入口地址

    bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就 ...

  5. JS框架设计之加载器所在路径的探知一模块加载系统

    1.要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为: ...

  6. log4j 路径环境变量配置和log4j加载配置

    1.lo4j日志路径从环境变量读取,log4j.xml配置如下: 具体配置如下: log4j.appender.R.Encoding=UTF-8 log4j.appender.R=org.apache ...

  7. pytorch_模型参数-保存,加载,打印

    1.保存模型参数(gen-我自己的模型名字) torch.save(self.gen.state_dict(), os.path.join(self.gen_save_path, 'gen_%d.pt ...

  8. MyBatis Java不同方式加载文件时的路径格式问题、Mybatis中加载.properties文件

    public class LoadPropTest { public static void main(String[] args) throws IOException { //一.Properti ...

  9. 【Java】学习路径63-反射、类的加载-附思维导图(完结)

    这一章的知识在实际开发也没有那么重要,主要是了解即可,另外掌握如何使用反射机制. 类的使用: 在虚拟机中: 类的加载->类的连接->类的初始化 类的加载   只会加载需要用到的类,加载到内 ...

随机推荐

  1. 扩展1 - Python 获取当前时间的用法

    1.先导入库:import datetime 2.获取当前日期和时间:now_time = datetime.datetime.now() 3.格式化成我们想要的日期:strftime() 比如:“2 ...

  2. 发布 Google Chrome插件教程

    换个视角,世界不一样.嘘~~~ 如果你会使用js的话,那么你就可以自己动手写一个chrome插件,而且非常容易.google是一个全球化的平台,想想自己的程序被世界人民所使用,是不是很激动? 注册开发 ...

  3. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

  4. 随便说说 post-processing

    九月份一篇博都没更新,这段时间一直在unity的坑里爬不起来,感觉真的很绝望啊,仿佛对生活都失去了信心. 渲染问题并没有解决,目前方案只是减轻视觉冲突,降低违和感.项目AR产品也做的越来越艰难,开始经 ...

  5. 使用sed,grep 批量修改文件内容

    使用sed命令可以进行字符串的批量替换操作,以节省大量的时间及人力: 使用的格式如下: sed -i "s/oldstring/newstring/g" `grep oldstri ...

  6. 快速恢复开发环境(系统还原后的思考,附上eclipse注释的xml配置文件)

    1.Eclipse/Myeclipse的工作空间,不能放在系统盘 除非你的项目都有实时的云同步或SVN等,才能放在系统固态盘,不然你享受快速启动项目的同时,也需要承担系统奔溃后找不回项目的风险: 公司 ...

  7. Android手机通过APN设置上网的方法

    今天一个朋友问了我关于android网络设置的问题,感觉还是挺有趣,特分享如下: 他是在香港买了一款LGP500的手机,系统是android系统,但是回来之后不能上网,于是在网上搜了很多资料,但是设置 ...

  8. Python玩转硬件:TPYBoard-Micropython开发板大盘点

    学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...

  9. js 数组API之filter的用法

    filter 查找数组中满足条件的元素,返回新数组:原数组不变 var subArr = arr.filter(function(value, index, array){ return 条件 }) ...

  10. iOS性能优化技术

    小小总结,后续继续跟进. 1. 提高应用性能的几个开发细节 * 尽量避免使用constraint实现动画 * 尽量避免使用数组的删除操作 * 尽量避免使用 NSString::stringWithFo ...