require函數


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

require是一個基於AMD規范實現的函數,它區別於傳統的CommonJS require規范。因為它能夠異步地加載動態的依賴,所以,我們對基於require的回調方式有了更多的需求。

 

局部require vs 全局require

局部require可以被解析成一個合符AMD工廠函數規范的require函數。

例如:

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。

全局require函數作用於全局,和define()類似。 全局require和局部require有着相同的行為,包含以下特征:

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

實際中,我們經常會遇到一些阻塞模塊加載的依賴,如果交互次數很多,需要大量的模塊加載,應該采用全局依賴的形式去加載頂層模塊。

 

require(String)

基於以下規范CommonJS Modules 1.1.1 require.根據參數,同步地返回模塊ID所代表的模塊。

如果模塊沒有加載或者執行完成,就會拋出錯誤。特別需要指出的是,在同步加載的回調中,如果模塊沒有加載完成,禁止動態的獲取模塊,否則,就會拋出異常。

使用define()定義模塊時,依賴項中可以找到一個AMD模塊:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM