var plugins = {
loader: function(builtin) {
window.define = builtin ? innerRequire.define : otherDefine
window.require = builtin ? innerRequire : otherRequire
},//判断使用那个require 和define

innerRequire = avalon.require = function(array, factory, parentUrl) {
if (!Array.isArray(array)) {
avalon.error("require的第一个参数必须是依赖列数,类型为数组 " + array)
} var deps = {} // args的另一种表现形式,为的是方便去重
var id = parentUrl || "callback" + setTimeout("1")
/* setTimeout("1")
*
* setTimeout() 方法的返回值是一个唯一的数值,这个数值有什么用呢?如果你想要终止 setTimeout() 方法的执行,那就必须使用 clearTimeout() 方法来终止,
* 而使用这个方法的时候,系统必须知道你到底要终止的是哪一个 setTimeout() 方法
* (因为你可能同时调用了好几个 setTimeout() 方法),这样 clearTimeout() 方法就需要一个参数,
* 这个参数就是 setTimeout() 方法的返回值 (数值),用这个数值来唯一确定结束哪一个 setTimeout() 方法。
* 在系统中每次调用一次,就会递增一次
*
*/
parentUrl = getBaseUrl(parentUrl)//获取模块加载的根目录
/*
* function getBaseUrl(parentUrl) {
return kernel.baseUrl ? kernel.baseUrl : parentUrl ?
parentUrl.substr(0, parentUrl.lastIndexOf("/")) :
kernel.loaderUrl
}
kernel在配置系统模块可以找到,该对象主要是处理我们自己配置的条件。
*/
//加载每个依赖的文件
array.forEach(function(el) {
var url = loadResources(el, parentUrl) //加载资源,并返回能加载资源的完整路径
if (url) {
if (!deps[url]) {//去重:如果deps中存在url,那就不用加入到依赖项数组中
args.push(url)
deps[url] = "司徒正美" //去重:
}
}
})
if (!modules[id]) {
//如果此模块是定义在另一个JS文件中, 那必须等该文件加载完毕
//才能放到检测列队中
loadings.push(id)
}
if (!modules[id] || modules[id].state !== 2) {
modules[id] = makeModule(id, 1, factory, deps, args)//更新此模块信息
} checkDeps()
}

avalon中require的实现的更多相关文章

  1. avalon 中require.config源码分析

    /********************************************************************* * 配置系统 在系统运行的开始就需要读取系统中requir ...

  2. PHP中require和include路径问题总结

    1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / ...

  3. 【转】PHP中require和include路径问题总结

    1 绝对路径.相对路径和未确定路径 2. 相对路径: 3. 绝对路径 4. 未确定路径 5. 解决方案 1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php ...

  4. 关于node中 require 和 ES6中export 、export default的总结

    nodejs中 require 方法的加载规则 方法的加载规则 1. 优先从缓存中加载 2. 核心模块 3. 路径形式的模块 4. 第三方模块 一.优先从缓存中加载 main.js:执行加载a.js模 ...

  5. PHP中require和include的区别

    include()与require()的功能相同 include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是二者再用法上有区 ...

  6. PHP中require()文件包含的正确用法

    以前看一些PHP框架源码的时候,很奇怪在文件包含的时候,会用dirname(__FILE__)来拼凑文件路 径,不知道这样做有什么好处,后来终于发现了其中的缘由. 我们来看一个简单的例子: 有a,b, ...

  7. php中require、require_once、include、include_once类库重复引入效率问题详解

    首先我详细说下这四个引入函数 include() 与require() 的功能相同 唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时 ...

  8. [转]webpack中require和import的区别

    webpack中可以写commonjs格式的require同步语法,可以写AMD格式的require回调语法,还有一个require.ensure,以及webpack自己定义的require.incl ...

  9. luci 中require函数包含的路径

    在 lua 脚本中常用的包含某个文件就是 require 函数. 例如: #!/usr/bin/lua                     // 表明使用的是lua脚本,像shell脚本一样 lo ...

随机推荐

  1. 在cocos2d-x中使用位图字体

    http://blog.csdn.net/fansongy/article/details/9006677 通常情况下,游戏中绚丽的文字和数字都不是字体生成的而是"贴"上去!今天, ...

  2. 读写应用程序数据-SQLite3

    SQLite3是嵌入到ios中的关系型数据库.对存储大规模的数据非常实用,使得不必将每个对象加到内存中. 支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串和文本).BLOB(二进制 ...

  3. Android(java)学习笔记149:Android线程形态之 AsyncTask (异步任务)

    1. AsyncTask和Handler的优缺点比较: 1)AsyncTask实现的原理和适用的优缺点        AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTa ...

  4. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

    答:解1:  select top 10 * from A where id not in (select top 30 id from A) 解2:  select top 10 * from A ...

  5. SQL错误:sql server 目录名无效

    今天遇到一个错误,在网上找了半天,还有人说需要重装sql.我出错误的是网站服务器..重装影响太大了.想找一个比较不影响网站运作的办法.终于也不负我努力(啊喂!其实满百度都是可是你看不懂好吧!)找到了一 ...

  6. JQ动画事件

    1.会飞的li html: <ul id="ulL"> <li>中国</li> <li>美国</li> <li&g ...

  7. ACM——进制转换

    http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1012 进制转换 时间限制(普通/Jav ...

  8. java- 枚举的常见用法

    用法一:常量 public enum MyColor{Red,Black,Blue} public enum Color { RED, GREEN, BLANK, YELLOW } enum为枚举类的 ...

  9. c# web页面乱码

    1.在web.config中加入:<globalization requestEncoding="GB2312" responseEncoding="GB2312& ...

  10. 09.13随笔2014年9月13日22:32:38,奶爸的英语教室,groovy

    我们这里只推荐一本语法书:台湾的旋元佑老师写的<文法俱乐部>(简体版名为<语法俱乐部>).这本书因为出版社倒闭而绝版,淘宝可以买到影印的版本. (1)学英语到 奶爸的英语教室  ...