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 = /(?:\?(?:[^&]*&)*([^&]*))?\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加载之间的关系的更多相关文章
- spring 配置参数从配置文件中加载到PropertiesFactoryBean 和配置参数从数据库加载到PropertiesFactoryBean 的实现,及项目中的相关应用
1.加载.properties文件中的配置参数加载到PropertiesFactoryBean容器中 <bean id="configProperties" class=&q ...
- module加载过程初步分析[更新中]【转】
转自:http://blog.chinaunix.net/uid-1817735-id-2837068.html 分析这个过程可以有助于我们认识在加载模块时出现的问题大抵在哪里了. 直接从sys_in ...
- 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式
渐进式jpeg(progressive jpeg)图片及其相关 一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...
- bootm命令中地址参数,内核加载地址以及内核入口地址
bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就 ...
- JS框架设计之加载器所在路径的探知一模块加载系统
1.要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为: ...
- log4j 路径环境变量配置和log4j加载配置
1.lo4j日志路径从环境变量读取,log4j.xml配置如下: 具体配置如下: log4j.appender.R.Encoding=UTF-8 log4j.appender.R=org.apache ...
- pytorch_模型参数-保存,加载,打印
1.保存模型参数(gen-我自己的模型名字) torch.save(self.gen.state_dict(), os.path.join(self.gen_save_path, 'gen_%d.pt ...
- MyBatis Java不同方式加载文件时的路径格式问题、Mybatis中加载.properties文件
public class LoadPropTest { public static void main(String[] args) throws IOException { //一.Properti ...
- 【Java】学习路径63-反射、类的加载-附思维导图(完结)
这一章的知识在实际开发也没有那么重要,主要是了解即可,另外掌握如何使用反射机制. 类的使用: 在虚拟机中: 类的加载->类的连接->类的初始化 类的加载 只会加载需要用到的类,加载到内 ...
随机推荐
- 【自问自答】关于 Swift 的几个疑问
感觉自己给自己释疑,也是一个极为有趣的过程.这次,我还新增了"猜想"一栏,来尝试回答一些暂时没有足够资料支撑的问题. Swift 版本是:4.0.3.不同版本的 Swift,可能无 ...
- 快速搭建vsftp 服务器并配置指定目录
1 搭建vsftp 服务器 前期准备: 1.用root 进入系统 2.使用命令 rpm -qa|grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vs ...
- 01-java技术体系基础
java体系基础 理论 编程语言: 系统级: C, C++, go, erlang ... 应用级: C#, Java, Python, Perl, Ruby, php 虚拟机: jvm(java虚拟 ...
- 走进Vue时代进阶篇(01):重构电商购物车模块
前言 从这篇文章开始,我准备给大家分享一些关于Vue.js这门框架的技巧性系列文章,正好我们公司项目中也用到了Vue.所以,教是最好的学.进阶篇比较适合于二三线城市,还在小厂打拼的童鞋们.欢迎你们跟着 ...
- 最新swift4.0 图片进行尺寸大小及体积压缩
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #4dbf56; background-color: #282b3 ...
- flex盒模型 详细解析
flex盒模型 详细解析 移动端页面布局,采用盒模型布局,效果很好 /* ============================================================ ...
- margin负值的作用
一.左右负margin改变自身宽度 当元素不存在width或者width:auto的时候,负margin会增加元素的宽度. html <div class="parent"& ...
- Mac新手使用指南:brew安装的nginx常用命令
安装:brew install nginx/sudo brew install nginx 启动:brew services start nginx/sudo brew services start ...
- 自学Aruba1.4-WLAN厂家魔力象限
点击返回:自学Aruba之路 1.4 自学Aruba1.4-WLAN厂家魔力象限 以下为2017<有线和无线局域网接入基础设施的魔力象限>报告: Aruba.cisco为无线领域 ...
- PyQt4 模拟记事本基本功能(保存,打开文件)
完成功能: 1. 默认[保存]按钮enable 2. 修改文本的内容后,[enable] 3. 解决字符乱码问题:utf-8 4. 提示:如果修改了文件没有保存的时候,又尝试打开新的文件,给出相关的提 ...