avalon中require的实现
var plugins = {
loader: function(builtin) {
window.define = builtin ? innerRequire.define : otherDefine
window.require = builtin ? innerRequire : otherRequire
},//判断使用那个require 和define
@@URTX.png)

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的实现的更多相关文章
- avalon 中require.config源码分析
/********************************************************************* * 配置系统 在系统运行的开始就需要读取系统中requir ...
- PHP中require和include路径问题总结
1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / ...
- 【转】PHP中require和include路径问题总结
1 绝对路径.相对路径和未确定路径 2. 相对路径: 3. 绝对路径 4. 未确定路径 5. 解决方案 1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php ...
- 关于node中 require 和 ES6中export 、export default的总结
nodejs中 require 方法的加载规则 方法的加载规则 1. 优先从缓存中加载 2. 核心模块 3. 路径形式的模块 4. 第三方模块 一.优先从缓存中加载 main.js:执行加载a.js模 ...
- PHP中require和include的区别
include()与require()的功能相同 include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来,但是二者再用法上有区 ...
- PHP中require()文件包含的正确用法
以前看一些PHP框架源码的时候,很奇怪在文件包含的时候,会用dirname(__FILE__)来拼凑文件路 径,不知道这样做有什么好处,后来终于发现了其中的缘由. 我们来看一个简单的例子: 有a,b, ...
- php中require、require_once、include、include_once类库重复引入效率问题详解
首先我详细说下这四个引入函数 include() 与require() 的功能相同 唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时 ...
- [转]webpack中require和import的区别
webpack中可以写commonjs格式的require同步语法,可以写AMD格式的require回调语法,还有一个require.ensure,以及webpack自己定义的require.incl ...
- luci 中require函数包含的路径
在 lua 脚本中常用的包含某个文件就是 require 函数. 例如: #!/usr/bin/lua // 表明使用的是lua脚本,像shell脚本一样 lo ...
随机推荐
- 【转】C++里定义全局变量和函数常用方法
http://blog.csdn.net/niying/article/details/637084 1:在头文件是声明变量,然后在使用的文件中用exten标识. ".h": in ...
- Centos7.0挂载优盘安装jdk1.7和tomcat7.0
Centos7.0挂载优盘安装jdk1.7和tomcat7.0 前言: 笔者发现用wget方法直接在服务器下载jdk和tomcat速度很慢,而且jdk1.7用wget方法下载链接不好找,不如直接从官网 ...
- javascript-01
1.JavaScript:浏览器脚本语言 2.JavaScript的作用 |-1.进行前端验证 |-2.实现页面的动态效果 3.JavaScript的特点 |-1.和java没有任何关系,官方标 ...
- HTML DOM对象
HTML DOM对象 Document对象每个载入浏览器的HTML文档都会成为Document对象Document对象让我们可以从javascript中操作文档中的所有元素Document对象是win ...
- JQ实现复选框的全选反选不选
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android ImageSwitcher和Gallery的使用
前几天,听说室友的老师要求他们做一个图片效果.其效果如下图所示(可左右滑动切换图片): 我当时晃眼一看,第一感觉好高级的样子.我还没做过这种效果呢,但室友说他们同学已经有人做出来了,我觉得既然有人做出 ...
- sqlserver中的锁
NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll ...
- 【转】【SQL SERVER】怎样处理作业中的远程服务器错误(42000)
(SQL SERVER)怎样处理作业中的远程服务器错误(42000) 问: 1.我创建了一个链接服务器. 2.在两台服务器之间创建了新的SQL用户. 3.编写了访问链接服务器的SQL语句,执行成功. ...
- Timestamp的作用及与字符串的相互转换 .
一.Timestamp的介绍 每一个数据库都有一个计数器,这个计数器记录着数据行的插入.更新行为.如果我们为一个表中增加 timestamp 列,那么,该列将记录每一个数据行的计数器值.假如数据库中当 ...
- HOOK函数(二)——全局HOOK
如果钩子函数定义于当前进程相关的线程中,则钩子函数只能处理当前进程的线程的消息,如果要想处理当前正在运行的所有进程的鼠标消息和键盘消息,那么安装钩子函数的代码必须实现在动态链接库中.所以如果想让安装的 ...