RequireJs邊學邊寫:(一)初識RequireJs

由於筆者也是初學RequireJS,所以在某些概念上來說,筆者也是拿不準啊,所以主要是在官網以及前輩的一些博客中吸取精華,加上一些自己的理解以及案例的製作,那麼下面主要給一些我自學的一些鏈接吧

requireJs是一個採用了javascirpt AMD(Asynchronous Module Definition)規範編寫的類庫,那麼要求的就是在採用requireJS分模塊加載類庫的時候,加載的類庫就必須是符合AMD規範的,比如說jquery在1.7版本之後就採用了AMD的規範來編寫類庫,那麼名正言順的採用requireJs來模塊話加載jquery的庫文件就不存在什麼問題,但是並不是所有的js文件都是符合AMD規範的,那麼在requireJS加載之後就不會起到什麼作用,當然也可以通過一些其他的方法來加載那麼沒有使用AMD編寫的js庫文件,這個在後面的一些文章中將會講到。

一、什麼是AMD

那麼既然requireJs使用AMD實現的一個類庫,所以我們首先得明白什麼是AMD,下面就是我引用的一段話,至於這段話是在哪看到之後然後順便做成了txt保存下來當時也沒有記錄。

當你要加載JavaScript模塊時,就會使用script標籤。爲了加載依賴的模塊,你就要先加載被依賴的,之後再加載依賴的。使用script標籤時,你需要按照此特定順序安排它們的加載,而且腳本的加載是同步的。可以使用async和defer關鍵字使得加載異步,但可能因此在加載過程中丟失加載的順序。另一個選擇是將所有的腳本捆綁打包在一起,但在捆綁的時候你仍然需要把它們按照正確的順序排序。 AMD就是這樣一種對模塊的定義,使模塊和它的依賴可以被異步的加載,但又按照正確的順序。


就我的理解來說,傳統的javascript加載情況下,js文件都是按照前後順序來加載的,意思就是說只有當第一個js文件加載完成,才能加載第二個js文件,這樣的好處是保證了js的文件依賴順序,但是同時也顯露出一個問題,就是如果第一個js文件的加載時間過長,那麼勢必會造成第二個js文件的加載執行,如果js是在放在dom渲染之前,那麼可能出現的結果就是在js未完成加載的情況下,整個頁面會出現一片空白的情況。

那麼,requireJS是怎麼樣加載的呢?requireJs採用的是異步的方式進行加載,使得彼此之間的js加載不收影響,代碼也不會一直阻塞,同時requireJs提供了回調的機制,使得只有在需求的模塊加載完成之後,纔會執行相應的代碼,那麼就在異步的基礎上保證了js文件的依賴性。

可以通過如下的一張圖清晰的看出requireJS的加載情況:

二、最簡單的requireJS入門案例

目錄結構如下:

js

|------app

|           |------test1.js

|           |------test2.js

|------lib

|          |------jquery.js

|------app.js

|------require.js

在js目錄下有一個app的文件夾,app的文件夾下有兩個js文件,lib文件夾下有jquery.js文件,另外在js的一級目錄下有app.js入口js文件以及require.js文件,index.html與js是同級目錄


① 加載requireJs的庫文件(從這裏下載)

  1. <script src="js/require.js" data-main="js/app" defer ascyn="true"></script>

在這裏需要注意幾點:

  1. ReuqireJS以一個相對於baseUrl的地址來加載所有的代碼。頁面頂層<script>標籤含有一個特殊的屬性data-main,require.js使用它來啓動腳本加載過程,而baseUrl一般設置到與該屬性相一致的目錄。

    注: baseUrl亦可以通過config設置。如果沒有顯示指定config及data-main,則默認的baseUrl爲包含RequireJs的那個HTML頁面。

    從上面就可以看出:那麼現在的baseUrl就是js文件夾,如果這裏面沒有data-main存在的話,那麼就是包含了requirejs的html頁面,也就是與js同級的index.html所在的目錄。

  2. RequireJs默認嘉定多有的依賴資源都是js腳本,因此無需再module ID上再加".js"後綴,RequireJs在進行module ID到path的解析時會自動不上後綴。上面的data-main中加載的文件實際上是"js/app.js"。

② app.js中編寫相應js代碼,就可以直接輸出了

app.js

  1. console.log("hello requireJs");

你會看到在控制檯輸出了"hello requireJs",至此一個最簡單的requireJS使用案例就到此爲止了。

頁面加載的順序就是index.html--->require.js--->app.js,然後是輸出。


OK,這一節就介紹這麼多,下一節來看看requireJs中的data-main屬性以及模塊定義。

發佈了60 篇原創文章 · 獲贊 29 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章