require.js用法介紹
關於require.js的基本介紹可以參閱require.js的作用簡單介紹一章節。
更多相關內容可以參閱以下兩篇文章:
(1).javascript如何實現模組程式設計簡單介紹一章節。
(2).javascript的AMD規範簡單介紹一章節。
下面就介紹一下require.js的用法,需要的朋友可以做一下參考。
一.require.js的載入:
這個就很簡單了,自行去官網下載即可。
下載後,假定把它放在js子目錄下面,就可以載入了。
[HTML] 純文字檢視 複製程式碼<script src="js/require.js"></script>
有人可能會想到,載入這個檔案,也可能造成網頁失去響應。解決辦法有兩個:
一個是把它放在網頁底部載入,另一個是寫成下面這樣:
[HTML] 純文字檢視 複製程式碼<script src="js/require.js" defer async="true" ></script>
async屬性表明這個檔案需要非同步載入,避免網頁失去響應。IE不支援這個屬性,只支援defer,所以把defer也寫上。
載入require.js以後,下一步就要載入我們自己的程式碼了。假定我們自己的程式碼檔案是main.js,也放在js目錄下面。那麼,只需要寫成下面這樣就行了:
[HTML] 純文字檢視 複製程式碼<script src="js/require.js" data-main="js/main"></script>
data-main屬性的作用是,指定網頁程式的主模組。
在上例中,就是js目錄下面的main.js,這個檔案會第一個被require.js載入。由於require.js預設的檔案字尾名是js,所以可以把main.js簡寫成main。
二.主模組的寫法:
把main.js稱為"主模組",意思是整個網頁的入口程式碼。它有點像C語言的main()函式,所有程式碼都從這兒開始執行。
下面就來看,怎麼寫main.js。
如果我們的程式碼不依賴任何其他模組,那麼可以直接寫入javascript程式碼。
[JavaScript] 純文字檢視 複製程式碼// main.js alert("載入成功!");
但這樣的話,就沒必要使用require.js了。
真正常見的情況是,主模組依賴於其他模組,這時就要使用AMD規範定義的的require()函式。
[JavaScript] 純文字檢視 複製程式碼// main.js require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC) { // some code here });
require()函式接受兩個引數:
第一個引數是一個陣列,表示所依賴的模組,上例就是['moduleA', 'moduleB', 'moduleC'],即主模組依賴這三個模組。
第二個引數是一個回撥函式,當前面指定的模組都載入成功後,它將被呼叫。載入的模組會以引數形式傳入該函式,從而在回撥函式內部就可以使用這些模組。
require()非同步載入moduleA,moduleB和moduleC,瀏覽器不會失去響應;它指定的回撥函式,只有前面的模組都載入成功後,才會執行,解決了依賴性的問題。
下面,我們看一個實際的例子。
假定主模組依賴jquery、underscore和backbone這三個模組,main.js就可以這樣寫:
[JavaScript] 純文字檢視 複製程式碼require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone) { // some code here });
require.js會先載入jQuery、underscore和backbone,然後再執行回撥函式。主模組的程式碼就寫在回撥函式中。
四.模組的載入:
上面,主模組的依賴模組是['jquery', 'underscore', 'backbone']。
預設情況下,require.js假定這三個模組與main.js在同一個目錄,檔名分別為jquery.js,underscore.js和backbone.js,然後自動載入。
使用require.config()方法,我們可以對模組的載入行為進行自定義。require.config()就寫在主模組(main.js)的頭部。引數就是一個物件,這個物件的paths屬性指定各個模組的載入路徑。
[JavaScript] 純文字檢視 複製程式碼require.config({ paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
上面的程式碼給出了三個模組的檔名,路徑預設與main.js在同一個目錄(js子目錄)。如果這些模組在其他目錄,比如js/lib目錄,則有兩種寫法。一種是逐一指定路徑。
[JavaScript] 純文字檢視 複製程式碼require.config({ paths: { "jquery": "lib/jquery.min", "underscore": "lib/underscore.min", "backbone": "lib/backbone.min" } });
另一種則是直接改變基目錄(baseUrl)。
[JavaScript] 純文字檢視 複製程式碼require.config({ baseUrl: "js/lib", paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
如果某個模組在另一臺主機上,也可以直接指定它的網址,比如:
[JavaScript] 純文字檢視 複製程式碼require.config({ paths: { "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min" } });
四.AMD模組的寫法:
require.js載入的模組,採用AMD規範。也就是說,模組必須按照AMD的規定來寫。
具體來說,就是模組必須採用特定的define()函式來定義。如果一個模組不依賴其他模組,那麼可以直接定義在define()函式之中。
假定現在有一個math.js檔案,它定義了一個math模組。那麼,math.js就要這樣寫:
[JavaScript] 純文字檢視 複製程式碼// math.js define(function () { var add = function (x, y) { return x + y; }; return { add: add }; });
載入方法如下:
[JavaScript] 純文字檢視 複製程式碼// main.js require(['math'], function (math){ alert(math.add(1,1)); });
如果這個模組還依賴其他模組,那麼define()函式的第一個引數,必須是一個陣列,指明該模組的依賴性。
[JavaScript] 純文字檢視 複製程式碼define(['myLib'], function(myLib){ function foo(){ myLib.doSomething(); } return { foo : foo }; });
當require()函式載入上面這個模組的時候,就會先載入myLib.js檔案。
五.載入非規範的模組:
理論上,require.js載入的模組,必須是按照AMD規範、用define()函式定義的模組。但是實際上,雖然已經有一部分流行的函式庫(比如jQuery)符合AMD規範,更多的庫並不符合。那麼,require.js是否能夠載入非規範的模組呢,毫無疑問是可以的。
這樣的模組在用require()載入之前,要先用require.config()方法,定義它們的一些特徵。
舉例來說,underscore和backbone這兩個庫,都沒有采用AMD規範編寫。如果要載入它們的話,必須先定義它們的特徵。
[JavaScript] 純文字檢視 複製程式碼require.config({ shim: { 'underscore':{ exports: '_' }, 'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' } } });
require.config()接受一個配置物件,這個物件除了有前面說過的paths屬性之外,還有一個shim屬性,專門用來配置不相容的模組。具體來說,每個模組要定義(1)exports值(輸出的變數名),表明這個模組外部呼叫時的名稱;(2)deps陣列,表明該模組的依賴性。
比如,jQuery的外掛可以這樣定義:
[JavaScript] 純文字檢視 複製程式碼shim: { 'jquery.scroll': { deps: ['jquery'], exports: 'jQuery.fn.scroll' } }
六.require.js外掛:
require.js還提供一系列外掛,實現一些特定的功能。
domready外掛,可以讓回撥函式在頁面DOM結構載入完成後再執行。
[JavaScript] 純文字檢視 複製程式碼require(['domready!'], function (doc){ // called once the DOM is ready });
text和image外掛,則是允許require.js載入文字和圖片檔案。
[JavaScript] 純文字檢視 複製程式碼define([ 'text!review.txt', 'image!cat.jpg' ], function(review,cat){ console.log(review); document.body.appendChild(cat); } );
相關文章
- python BeautifulSoup用法介紹Python
- Git ORIG_HEAD用法介紹Git
- Python qutip用法(舉例介紹)Python
- MongoDB三種聚合命令用法介紹MongoDB
- Selenium用法 - - 自動化測試介紹
- CSS3 clip-path 用法介紹CSSS3
- Django model update的各種用法介紹Django
- Google Analytics 的一些用法介紹Go
- Vue腳手架介紹與基本用法Vue
- impdp和expdp用法及引數介紹
- SQL?Server新特性SequenceNumber用法介紹YTZBSQLServer
- PTSQLServer中exists和except用法介紹wkaSQLServer
- Django筆記十九之manager用法介紹Django筆記
- CSS3轉換(transform)基本用法介紹CSSS3ORM
- 『簡書API:jianshu 基於golang -- 用法介紹 (2)』APIGolang
- 依賴倒置原則的基本用法和介紹
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- 簡單介紹Python中異常處理用法Python
- SAP 電商雲 Spartacus UI UrlMatcherService 的用法介紹UI
- js迴圈中reduce的用法簡單介紹JS
- 達夢資料庫Disql用法詳解之Disql命令列命令用法介紹資料庫SQL命令列
- amd規範&require.jsUIJS
- 為什麼需要require.jsUIJS
- html中Position屬性值介紹和position屬性四種用法HTML
- 【Java註解用法】@Autowired 與@Resource的區別以及@Qualifier的介紹Java
- 介紹
- Java併發程式設計-Future系列之Future的介紹和基本用法Java程式設計
- require.js瞭解一下UIJS
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- Proxy介紹
- Reflect介紹
- Azkaban介紹
- 模式介紹模式
- ZooKeeper介紹
- css介紹CSS
- PostgreSQLHooK介紹SQLHook
- DuelJS 介紹JS
- Docker介紹Docker
- StarRocks 介紹