課程目標:
利用requirejs實現前端模塊化開發hao123項目實戰
適應人群:
前端開發人員
課程介紹:
What is RequireJS?? ?在說明什么是RequireJS之前,不得不提的就是Javascript模塊化歷史的背景。其實在早期,javascript作為一門新興的腳本語言出現,有著龐大的愿景,它并不是作為一門僅僅針對客戶端設計的語言。只是說后來web應用的流行,javascript作為瀏覽器端腳本語言而迅速傳開,加上Netscape和微軟的競爭將其過早的標準化。所以就導致了JS的諸多缺陷,其中一個就是模塊化(但是你可以驚奇地發現其實javascript有將import,export等作為保留字,說明設計的時候其實是有考慮的,新的標準es6也讓原生支持模塊化了)。然后隨著web應用越來越復雜,嵌入的javascript代碼越來越多,還有node的興起,模塊化編程就變成了必須。
所以就有了后來Dojo工具包和Google的Closure庫支持的模塊系統。還有兩個非常通用的標準規范,CommonJS和AMD。這里就不展開說了,我們只需要知道,實現CommonJS規范的API是同步加載模塊的,而實現AMD規范的API是則是異步加載模塊。
所以理論上來說,AMD規范的非阻塞加載更加適合瀏覽器端。而RequireJS就是AMD規范的最好實現。抄一段官方文檔對RequireJS的描述:
RequireJS 是一個JavaScript模塊加載器。它非常適合在瀏覽器中使用, 它非常適合在瀏覽器中使用,但它也可以用在其他腳本環境, 就像 Rhino and Node. 使用RequireJS加載模塊化腳本將提高代碼的加載速度和質量。
Why RequireJS?? ?所以,知道了RequireJS是干什么的,也差不多知道為什么我們要使用RequireJS了。不過還是總結一下用RequireJS的好處吧。
異步“加載”。我們知道,通常網站都會把script腳本的放在html的最后,這樣就可以避免瀏覽器執行js帶來的頁面阻塞。使用RequireJS,會在相關的js加載后執行回調函數,這個過程是異步的,所以它不會阻塞頁面。
按需加載。通過RequireJS,你可以在需要加載js邏輯的時候再加載對應 的js模塊,這樣避免了在初始化網頁的時候發生大量的請求和數據傳輸,或許對于一些人來說,某些模塊可能他根本就不需要,那就顯得沒有必要。
更加方便的模塊依賴管理。相信你曾經一定遇到過因為script標簽順序問題而導致依賴關系發生錯誤,這個函數未定義,那個變量undefine之類的。通過RequireJS的機制,你能確保在所有的依賴模塊都加載以后再執行相關的文件,所以可以起到依賴管理的作用。
更加高效的版本管理。想一想,如果你還是用的script腳本引入的方式來引入一個jQuery2.x的文件,然后你有100個頁面都是這么引用的,那當你想換成jQuery3.x,那你就不得不去改這100個頁面。但是如果你的requireJS有在config中做jQuery的path映射,那你只需要改一處地方即可。
當然還有一些諸如cdn加載不到js文件,可以請求本地文件等其它的優點,這里就不一一列舉了。
RequireJS 使用需要在頁面中引入的文件 <script data-main=”js/main” src=”xxx/xxxx/require.js”></script>使用RequireJS,你只需要引入一個require.js即可。需要說明的是,一個比較好的實踐,就是你的頁面上面應該也只需要通過\<script\>標簽引入這一個js即可。然后你這個頁面的所有業務邏輯只需要在main.js里面寫(data-main屬性作用后面會有講)就可以了。其它引用的依賴怎么辦?當然是通過require按需引入?。?br />
Require基本概述其實Requirejs整個源文件包括注釋就2000來行,其對外暴露的變量其實就三個,requirejs,require,define。
這其中requirejs 只是require的一個別名,目的是如果頁面中有require其它實現了,你還是能通過使用requirejs來使用requireJS API的(本文中沒有相關沖突,所以還是使用require)。
所以這意味著作為入門,你只需要掌握require,require.config,define這三樣就可以了。
本文將以介紹require,require.config,data-main,define的順序來介紹RequireJS。讓比較簡單的RequireJS更加簡單,爭取讓大家只看這篇文章就能用好RequireJS。至于RequireJS是如何解決循環依賴,對于沒有實現amd的模塊如何通過shim來導出,如何在node中使用等問題。本文并沒有提及,詳細有需要可以去官方查閱。