AMD_CMD_RequireJS_模塊化

1. 為什么要使用模塊化抵卫?

1.解決命名沖突
2.解決文件依賴問題
3.模塊的版本管理柳恐。通過別名等配置,配合構建工具狸捕,可以比較輕松地實現模塊的版本管理喷鸽。
4.提高可維護性。模塊化可以讓每個文件的職責單一灸拍,非常有利于代碼的維護做祝。
5.前端性能優(yōu)化。通過異步加載模塊鸡岗,這對頁面性能非常有益混槐。
6.跨環(huán)境共享模塊。CMD 模塊定義規(guī)范與 Node.js 的模塊規(guī)范非常相近轩性∩牵可以很方便實現模塊的跨服務器和瀏覽器共享。
7.提高代碼可讀性,代碼解耦揣苏,提高復用性
參考:玉伯也射雕github

2. CMD捌刮、AMD、CommonJS 規(guī)范分別指什么舒岸?有哪些應用

CommonJS
1.Node應用由模塊組成绅作,采用CommonJS模塊規(guī)范。
根據這個規(guī)范蛾派,每個文件就是一個模塊俄认,有自己的作用域。在一個文件里面定義的變量洪乍、函數眯杏、類,都是私有的壳澳,對其他文件不可見

2.CommonJS規(guī)范規(guī)定岂贩,每個模塊內部,module變量代表當前模塊巷波。這個變量是一個對象萎津,它的exports屬性(即module.exports)是對外的接口。加載某個模塊抹镊,其實是加載該模塊的module.exports屬性,加載模塊使用require 方法锉屈,該方法讀取一個文件并執(zhí)行,如果請求的模塊不能返回垮耳,那么 require 必須拋出一個錯誤颈渊。

3.CommonJS模塊的特點如下:
所有代碼都運行在模塊作用域遂黍,不會污染全局作用域。
模塊可以多次加載俊嗽,但是只會在第一次加載時運行一次雾家,然后運行結果就被緩存了,以后再加載绍豁,就直接讀取緩存結果榜贴。要想讓模塊再次運行,必須清除緩存妹田。
模塊加載的順序,按照其在代碼中出現的順序

js標準教程

/*
模塊定義model.js
*/ 

function printName(){
    console.log('a');
}
function sayHello(){
    console.log("hello" );
}
module.exports = {
    printName: printName,
    sayHello: sayHello
}
/*
加載模塊
*/
var nameModule = require("./model.js")
nameModule.printName() //"a"
nameModule.sayHello() //"hello"

AMD
1.define和require這兩個定義模塊鹃共、調用模塊的方法鬼佣,合稱為AMD模式。它的模塊定義的方法非常清晰霜浴,不會污染全局環(huán)境晶衷,能夠清楚地顯示依賴關系,主要用于瀏覽器端。

2.AMD模式可以用于瀏覽器環(huán)境阴孟,并且允許非同步加載模塊晌纫,也可以根據需要動態(tài)加載模塊

3.requireJS主要解決兩個問題:
a. 多個js文件可能有依賴關系,被依賴的文件需要早于依賴它的文件加載到瀏覽器
b. js加載的時候瀏覽器會停止頁面渲染永丝,加載文件越多锹漱,頁面失去響應時間越長

4.語法:
define(id?, dependencies?, factory);
require([dependencies], function(){});

//定義模塊 myModule.js
define(['dependency'],function(){
    //定義方法,并return 出去
    var name = 'xx'
    function PrintName(){
        console.log(name);
    }
    return {
        PrintName:PrintName
    }
})
//加載模塊
require(['mod'],function(my){
    my.PrintName();
})

/*
define(id?, dependencies?, factory);

A. id: 定義中模塊的名字,可選慕嚷;如果沒有提供該參數哥牍,模塊的名字應該默認為模塊加載器請求的指定腳本的名字。喝检。
B. 依賴dependencies:是一個當前模塊依賴的嗅辣,已被模塊定義的模塊標識的數組字面量。 定的參數個數調用工廠方法挠说。
C. 工廠方法factory澡谭,模塊初始化要執(zhí)行的函數或對象。如果為函數损俭,它應該只被執(zhí)行一次蛙奖。如果是對象,此對象應該為模塊的輸出值杆兵。

require([dependencies], function(){});

A. 第一個參數是一個數組外永,表示所依賴的模塊
B. 第二個參數是一個回調函數,當前面指定的模塊都加載成功后拧咳,它將被調用伯顶。加載的模塊會以參數形式傳入該函數,從而在回調函數內部就可以使用這些模塊
require()函數在加載依賴的函數的時候是異步加載的,這樣瀏覽器不會失去響應祭衩,它指定的回調函數灶体,只有前面的模塊都加載成功后,才會運行掐暮,解決了依賴性的問題蝎抽。
*/

CMD
CMD(Common Module Definition)是 SeaJS推廣過程中產生的。在 CMD 規(guī)范中路克,一個模塊就是一個文件樟结。
define(id?, deps?, factory)
A. 一個文件一個模塊,所以經常就用文件名作為模塊id
B. CMD推崇依賴就近精算,所以一般不在define的參數中寫依賴瓢宦,在factory中寫
factory有三個參數 function(require, exports, module)
require 是 factory 函數的第一個參數,require 是一個方法,接受 模塊標識 作為唯一參數灰羽,用來獲取其他模塊提供的接口
Exports:exports
是一個對象驮履,用來向外提供模塊接口
Module:module
是一個對象,上面存儲了與當前模塊相關聯的一些屬性和方法

//定義模塊 myModule.js
define(function(require, exports, module){
    var $ = require("jquery.js")
    $("div").addClass("active")
})

//加載模塊
seajs.use(['myModule.js'], function(my){

})

3. 使用 requirejs 完成企業(yè)建站功能包括:

1. 首屏大圖為全屏輪播
2. 有回到頂部功能
3. 圖片區(qū)使用瀑布流布局(圖片高度不一)廉嚼,下部有加載更多按鈕玫镐,點擊加載更多會加載更多數據(數據在后端 mock)
4. 使用 r.js 打包應用

企業(yè)建站模塊化_效果預覽

gitHub_代碼預覽

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怠噪,隨后出現的幾起案子恐似,更是在濱河造成了極大的恐慌,老刑警劉巖傍念,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹂喻,死亡現場離奇詭異,居然都是意外死亡捂寿,警方通過查閱死者的電腦和手機口四,發(fā)現死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秦陋,“玉大人蔓彩,你說我怎么就攤上這事〔蹈牛” “怎么了赤嚼?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顺又。 經常有香客問我更卒,道長,這世上最難降的妖魔是什么稚照? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任蹂空,我火速辦了婚禮俯萌,結果婚禮上,老公的妹妹穿的比我還像新娘上枕。我一直安慰自己咐熙,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布辨萍。 她就那樣靜靜地躺著棋恼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锈玉。 梳的紋絲不亂的頭發(fā)上爪飘,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音拉背,去河邊找鬼师崎。 笑死,一個胖子當著我的面吹牛去团,可吹牛的內容都是我干的。 我是一名探鬼主播穷蛹,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼土陪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肴熏?” 一聲冷哼從身側響起鬼雀,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛙吏,沒想到半個月后源哩,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鸦做,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年励烦,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泼诱。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡坛掠,死狀恐怖,靈堂內的尸體忽然破棺而出治筒,到底是詐尸還是另有隱情屉栓,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布耸袜,位于F島的核電站友多,受9級特大地震影響,放射性物質發(fā)生泄漏堤框。R本人自食惡果不足惜域滥,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一纵柿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骗绕,春花似錦藐窄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撤缴,卻和暖如春刹枉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屈呕。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工微宝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虎眨。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓蟋软,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗽桩。 傳聞我的和親對象是個殘疾皇子岳守,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容