require API 介绍 https://github.com/amdjs/amdjs-api/wiki/requirehtml
require是一个基于AMD规范实现的函数,它区别于传统的CommonJS require规范。由于它可以异步地加载动态的依赖,因此,咱们对基于require的回调方式有了更多的需求。git
局部require能够被解析成一个合符AMD工厂函数规范的require函数。github
例如:正则表达式
1 define(['require'], function (require) { 2 //the require in here is a local require. 3 }); 4 5 define(function (require, exports, module) { 6 //the require in here is a local require. 7 });
局部require也支持其余标准实现的API。api
全局require函数做用于全局,和define()相似。 全局require和局部require有着相同的行为,包含如下特征:数组
实际中,咱们常常会遇到一些阻塞模块加载的依赖,若是交互次数不少,须要大量的模块加载,应该采用全局依赖的形式去加载顶层模块。异步
基于如下规范CommonJS Modules 1.1.1 require.根据参数,同步地返回模块ID所表明的模块。函数
若是模块没有加载或者执行完成,就会抛出错误。特别须要指出的是,在同步加载的回调中,若是模块没有加载完成,禁止动态的获取模块,不然,就会抛出异常。ui
使用define()定义模块时,依赖项中能够找到一个AMD模块:spa
1 define(function (require) { 2 var a = require('a'); 3 });
工厂方法能够被解析成require('')的调用形式(例如,使用语法解析器或者使用Function.prototype.toString()或者正则表达式)去找到依赖,加载而且执行依赖,而后执行工厂方法内部代码,经过这样的方式,就能够获取到模块。
参数Array是一个由模块ID组成的数组。当模块ID因此表明的模块加载完成且可用时,回调函数Function才开始执行,而且只被执行一次。各个模块按照依赖数组中的位置顺序以参数的形式传入到Function里。
例如:
1 define(function (require) { 2 require(['a', 'b'], function (a, b) { 3 //modules a and b are now available for use. 4 }); 5 });
将形如[module ID] + '.extension'这种字符形式转化成URL路径。
require.toUrl()方法采用通用的模块ID路径转化规则,将模块ID字符解析成URL路径.但它不支持以".js"这种扩展形式。因此,咱们必须将'.extension'添加到了解析路径里。
例如:
1 //cart.js contents: 2 define (function(require) { 3 // 模块ID名 './templates/a' 4 // 扩展名 '.html' 5 // 模板路径大体以这样的形式结尾 'modules/cart/templates/a.html' 6 var templatePath = require.toUrl('./templates/a.html'); 7 });