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 });