當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
深入浅出requireJS-1
生活随笔
收集整理的這篇文章主要介紹了
深入浅出requireJS-1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們都知道,雖然我們可以通過原型和繼承來使javascript面向對象。但是,當js代碼和邏輯過多時,代碼的維護和擴展會變的很不方便。這時,nodejs做的非常好,但是在瀏覽器端模塊化的js編程一直都是個難題。而requireJS就是來幫助我們解決這個問題的。requireJS遵循amd規范,所以讓我們先了解下關于AMD規范的事情。
一、AMD規范
AMD規范是瀏覽器端的模塊規范,它的全稱為異步模塊定義。從名稱上看便知它是適合script tag的。也可以說AMD是專門為瀏覽器中JavaScript環境設計的規范。它吸取了CommonJS的一些優點,但又不照搬它的格式。開始AMD作為CommonJS的transport format?存在,因無法與CommonJS開發者達成一致而獨立出來。它有自己的wiki?和討論組?。
AMD設計出一個簡潔的寫模塊API:
define(id?, dependencies?, factory);
其中:
- id: 模塊標識,可以省略。
- dependencies: 所依賴的模塊,可以省略。
- factory: 模塊的實現,或者一個JavaScript對象。
ui.js
define(['base'], function(base) {return {show: function() {// todo with module base}} });?
page.js
define(['base'],?function(base) { ????return?{ ????????show:?function() { ????????????// todo with module base ????????} ????} });?
data.js
define({ ????users: [], ????members: [] });?
以上同時演示了define的三種用法?
具名模塊多數時候是不推薦的,一般由打包工具合并多個模塊到一個js文件中時使用。 前面提到dependencies元素的順序和factory一一對應,其實不太嚴謹。AMD開始為擺脫CommonJS的束縛,開創性的提出了自己的模塊風格。但后來又做了妥協,兼容了 CommonJS?Modules/Wrappings?。即又可以這樣寫 5,包裝模塊 define(function(require, exports, module) { ????var?base = require('base'); ????exports.show =?function() { ????????// todo with module base ????} });?
不考慮多了一層函數外,格式和Node.js是一樣的:使用require獲取依賴模塊,使用exports導出API。 除了define外,AMD還保留一個關鍵字require。require?作為規范保留的全局標識符,可以實現為?module loader,也可以不實現。 目前,實現AMD的庫有RequireJS?、curl?、Dojo?、bdLoad、JSLocalnet?、Nodules?等。 也有很多庫支持AMD規范,即將自己作為一個模塊存在,如MooTools?、jQuery?、qwery?、bonzo??甚至還有?firebug?。 二、CMD規范 與AMD規范類似的還有CMD規范, 在CMD中,一個模塊就是一個文件,格式為: define( factory ); 全局函數define,用來定義模塊。 參數 factory ?可以是一個函數,也可以為對象或者字符串。 當 factory 為對象、字符串時,表示模塊的接口就是該對象、字符串。 定義JSON數據模塊:define( id?, deps?, factory ); define也可以接受兩個以上的參數,字符串id為模塊標識,數組deps為模塊依賴:
與nodeJS中一樣需要注意的是,一下方式是錯誤的:
需要這么做
?
轉載于:https://www.cnblogs.com/dunken/p/4524093.html
總結
以上是生活随笔為你收集整理的深入浅出requireJS-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git add 命令的一个习惯用法:逐个
- 下一篇: paip.获取proxool的配置 x