require
2015-10-19 17:27
726 查看
require
require是一个基于AMD规范实现的函数,它区别于传统的CommonJSrequire规范。因为它能够异步地加载动态的依赖,所以,我们对基于require的回调方式有了更多的需求。
Tests
Discussion
API
Specification
局部require
vs 全局require
局部require可以被解析成一个合符AMD工厂函数规范的require函数。例如:
define(['require'], function (require) { //the require in here is a local require. }); define(function (require, exports, module) { //the require in here is a local require. });
局部require也支持其他标准实现的API。
全局require函数作用于全局,和define()类似。 全局require和局部require有着相同的行为,包含以下特征:
模块ID应该认为是一个绝对的模块名称,而不是相对另一个模块的ID。
只有在异步的时候,才可以使用require(id, callback?)的回调形式。因为异步加载模块的方式是先发出一个异步请求,然后等主线程代码段执行完毕才能进行异步回调来处理加载好的模块。
实际中,我们经常会遇到一些阻塞模块加载的依赖,如果交互次数很多,需要大量的模块加载,应该采用全局依赖的形式去加载顶层模块。
require(String)
基于以下规范CommonJS Modules 1.1.1 require.根据参数,同步地返回模块ID所代表的模块。如果模块没有加载或者执行完成,就会抛出错误。特别需要指出的是,在同步加载的回调中,如果模块没有加载完成,禁止动态的获取模块,否则,就会抛出异常。
使用define()定义模块时,依赖项中可以找到一个AMD模块:
define(function (require) { var a = require('a'); });
工厂方法可以被解析成require('')的调用形式(例如,使用语法解析器或者使用Function.prototype.toString()或者正则表达式)去找到依赖,加载并且执行依赖,然后执行工厂方法内部代码,通过这样的方式,就可以获取到模块。
require(Array,
Function)
参数Array是一个由模块ID组成的数组。当模块ID所以代表的模块加载完成且可用时,回调函数Function才开始执行,并且只被执行一次。各个模块按照依赖数组中的位置顺序以参数的形式传入到Function里。例如:
define(function (require) { require(['a', 'b'], function (a, b) { //modules a and b are now available for use. }); });
require.toUrl(String)
将形如[module ID] + '.extension'这种字符形式转化成URL路径。require.toUrl()方法采用通用的模块ID路径转化规则,将模块ID字符解析成URL路径.但它不支持以".js"这种扩展形式。所以,我们必须将'.extension'添加到了解析路径里。
例如:
//cart.js contents: define (function(require) { // 模块ID名 './templates/a' // 扩展名 '.html' // 模板路径大致以这样的形式结尾 'modules/cart/templates/a.html' var templatePath = require.toUrl('./templates/a.html'); });
相关文章推荐
- Ant 的build.xml 详解
- iOS9 UI Tests
- 更改UILabel的字体样式及某段文字中的颜色
- Github push 错误The requested URL returned error: 403 Forbidden while accessing
- iOS多线程编程NSOperation和NSOperationQueue的使用
- 一、ios的通过Xib构建UICollectionView的简单运用
- easyuI企业管理系统-实战七 导航二
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- easyuI企业管理系统-实战六 导航一
- UIScrollView 截图
- 蓝牙(2) Core Bluetooth
- easyuI企业管理系统-实战六 查询功能
- android 设计模式——Builder
- iOS9中UIStackView的使用
- iOS7 注意事项 UITableViewCell层级改变注意事项
- mac下Spyder 错误:ValueError: unknown locale: UTF-8解决方法
- UIScrollView 实践经验
- 如何对map中的value进行排序
- The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced from required
- Android MessageQueue 源码笔记