require函數

require API 介紹 https://github.com/amdjs/amdjs-api/wiki/requirehtml

require是一個基於AMD規範實現的函數,它區別於傳統的CommonJS require規範。由於它可以異步地加載動態的依賴,因此,咱們對基於require的回調方式有了更多的需求。git

 

局部require vs 全局require

局部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有着相同的行爲,包含如下特徵:數組

  • 模塊ID應該認爲是一個絕對的模塊名稱,而不是相對另外一個模塊的ID。
  • 只有在同步的時候,基於require的回調才能夠當即的運行,由於它不可能在頂層經過require(String)的形式同步地加載模塊

實際中,咱們常常會遇到一些阻塞模塊加載的依賴,若是交互次數不少,須要大量的模塊加載,應該採用全局依賴的形式去加載頂層模塊。異步

 

require(String)

基於如下規範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()或者正則表達式)去找到依賴,加載而且執行依賴,而後執行工廠方法內部代碼,經過這樣的方式,就能夠獲取到模塊。

 

require(Array, Function)

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



require.toUrl(String)

將形如[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     });
相關文章
相關標籤/搜索