avalon中require的实现
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的实现的更多相关文章
- 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 ...
随机推荐
- 嵌入式Linux-GNU Make 使用手册(中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构.理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级 ...
- SpringMVC——项目启动时从数据库查询数据
SpringMVC项目中遇到这样的问题: 1.很多数据字典需要从数据库中查询: 2.懒得修改SQL语句: 3.想在项目中声明静态变量存储数据字典,但是希望这个字典可以在项目启动时进行加载. 当遇到这样 ...
- skynet启动过程_1
skynet的启动时需带个配置文件,这个文件其实是作为lua全局变量用的,见 int main(int argc, char *argv[]) { const char * config_file = ...
- 迭代器模式(Iterator Pattern)
迭代器模式定义:Iterator Pattern提供一种方法顺序访问一个聚合元素中的各个元素,而又不暴漏内部方法 酒吧提供beer和wine: public class Bar { private L ...
- nyoj 33 蛇形填数
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 ...
- magento flat和eav表连接的不同
对于flat表,也就是普通的表,例如订单之类的sales_flat_order,这类型的连接,Collection连接 $table = Mage::getSingleton('core/resour ...
- js 字符串编码转换函数
escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...
- 20160501--struts2入门3
一.自定义拦截器 要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口: public class PermissionInterc ...
- eclipse Ctrl+1 没反应
今天上午写代码,突然发现Ctrl+1没反应了,顿时无语.昨天还好好的,今天就不行了…… 无奈,只好在网上查了查,据说快捷键冲突的原因比较大. 于是我将Ctrl+1换成了Alt+1.在eclipse中测 ...
- Lucene/Solr开发经验
1.开篇语2.概述3.渊源4.初识Solr5.Solr的安装6.Solr分词顺序7.Solr中文应用的一个实例8.Solr的检索运算符 [开篇语]按照惯例应该写一篇技术文章了,这次结合Lucene/S ...