關(guān)于前端模塊化的迷思

提到模塊化就離不開(kāi)工程化幻林,所以先扯個(gè)圖在這沪饺。闷愤。。(我對(duì)工程化的理解和實(shí)踐還很不全面遭居,這個(gè)圖完全是按照這個(gè)文章的思路加點(diǎn)自己的理解總結(jié)的,還有很多不全面和不準(zhǔn)確的地方俱萍,懇請(qǐng)指正)

工程化

下面進(jìn)入文章的正題枪蘑,模塊化。(就是上圖中間空出的那個(gè)大分支)
從我接觸前端起 ES6 就已經(jīng)進(jìn)入大眾視野照捡,大家已經(jīng)開(kāi)始使用 import/export话侧,導(dǎo)致我對(duì)早期模塊化和相關(guān)的工具很不了解,經(jīng)常聽(tīng)到悲立、看到AMD/CMD/CommonJS/requirejs/r.js/sea.js 但是卻不知道他們的區(qū)別和關(guān)系新博。恰好最近有一個(gè)項(xiàng)目(哦,其實(shí)還是第一篇博客 的這個(gè))在整合 react 進(jìn)來(lái)寥殖,遇到了一些和模塊化相關(guān)的問(wèn)題涩蜘,借此把之前模模糊糊的問(wèn)題梳理一下。

總體概覽:

我們主要要講的是粤策,早期各種流派的模塊化規(guī)范误窖,和實(shí)現(xiàn)了相應(yīng)規(guī)范的工具。下面我們就沿著這個(gè)路子詳細(xì)談?wù)劇?/p>

先說(shuō)標(biāo)準(zhǔn):

在還沒(méi)有標(biāo)準(zhǔn)的規(guī)范出臺(tái)之前柔吼,社區(qū)為了實(shí)現(xiàn)模塊化已經(jīng)推出了幾種丙唧,包括:AMD,CMD,CommonJs。這三種規(guī)范之間還有著錯(cuò)綜復(fù)雜的關(guān)系培漏,并且 CMD 是國(guó)內(nèi)發(fā)展出來(lái)的。但是這些都不是我們的重點(diǎn)牌柄。規(guī)范規(guī)定了他們的寫(xiě)法珊佣,和模塊加載的時(shí)機(jī)、方式等彩扔。具體來(lái)說(shuō)的話(huà)就是:

AMD:
  • 語(yǔ)法:
  define(["require"],function(require){
  //注意這里虫碉,即使沒(méi)有 require 胸梆,也就是可能沒(méi)用到這個(gè)模塊,AMD 默認(rèn)也是 下載并執(zhí)行好的
    if(false){
      var module = require('./a');
    }
return ...//這里返回的就是 require 時(shí)候參數(shù)里拿到的東西
  })
  • 特征
    都是在調(diào)用 define 方法確定了依賴(lài)之后就開(kāi)始下載文件并執(zhí)行兢卵。
    也就是說(shuō)實(shí)際上是一個(gè)異步加載的過(guò)程绪颖。
  • 相關(guān)工具
    requireJs
    注:其實(shí)就是在前端實(shí)現(xiàn)了一個(gè)在線(xiàn)的加載器。requireJs 提供了一個(gè)基于 node 的命令行工具 r.js窃款,用來(lái)壓縮多個(gè)模塊文件牍氛。在 node 端完成這個(gè)任務(wù),避免客戶(hù)端多次請(qǐng)求紊扬。其實(shí)就是一個(gè)線(xiàn)下的打包器唉擂。我個(gè)人覺(jué)得這兩種方案就是在平衡合并請(qǐng)求按需加載之間的矛盾。
CMD
  • 語(yǔ)法:
define(function(require, exports, module) {
  ...
  //依賴(lài)就近啤挎,用的時(shí)候才執(zhí)行
   var clock = require('clock');
   clock.start();
});
  • 特征:
  • 相關(guān)工具:
    SeaJs
    和 RequireJs 的語(yǔ)法很像,但是指定依賴(lài)的模塊是在傳過(guò)去的方法里確定的胜臊,而不是調(diào)用傳參的方式伙判。仔細(xì)想便知,這樣加載器在確定加載文件實(shí)際上只能通過(guò)靜態(tài)分析的方法去解析然后加載(事實(shí)也確實(shí)如此勒魔,是正則匹配 require 的過(guò)程)菇曲。但是執(zhí)行是在用的時(shí)候才執(zhí)行常潮。
CommonJs

是 node 采用的規(guī)范,此處不詳述了孵户。岔留。好了。竖配。里逆。去睡覺(jué)了。龄减。??

(推薦一篇講 browserify 運(yùn)行原理的文章班眯,覺(jué)得不錯(cuò),建議一看宠能。具體剖析等我什么時(shí)候也能自己寫(xiě)模塊加載器的時(shí)候再寫(xiě)吧磁餐。阿弃。羞延。)

參考文章:
前端工程——基礎(chǔ)篇
前端模塊化開(kāi)發(fā)的價(jià)值
前端模塊化開(kāi)發(fā)那點(diǎn)歷史
browserify 運(yùn)行原理分析
RequireJS和AMD規(guī)范
LABjs伴箩、RequireJS、SeaJS 哪個(gè)最好用棺蛛?為什么巩步?
AMD 是提前執(zhí)行,CMD 是延遲執(zhí)行 如何理解呢终畅?

前端工程與模塊化框架
前端工程與性能優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芒炼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌本刽,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異斜友,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烹看,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)惯殊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)也殖,“玉大人,你說(shuō)我怎么就攤上這事己儒。” “怎么了该镣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵损合,是天一觀(guān)的道長(zhǎng)娘纷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赖晶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任捂贿,我火速辦了婚禮厂僧,結(jié)果婚禮上了牛,老公的妹妹穿的比我還像新娘。我一直安慰自己甫窟,他們只是感情好蛙婴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布街图。 她就那樣靜靜地躺著,像睡著了一般径玖。 火紅的嫁衣襯著肌膚如雪颤介。 梳的紋絲不亂的頭發(fā)上赞赖,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音冤灾,去河邊找鬼前域。 笑死,一個(gè)胖子當(dāng)著我的面吹牛韵吨,可吹牛的內(nèi)容都是我干的匿垄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼归粉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椿疗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起糠悼,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤届榄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后铝条,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡席噩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年班缰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悼枢。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡埠忘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萧芙,到底是詐尸還是另有隱情给梅,我是刑警寧澤假丧,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布双揪,位于F島的核電站,受9級(jí)特大地震影響包帚,放射性物質(zhì)發(fā)生泄漏渔期。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一渴邦、第九天 我趴在偏房一處隱蔽的房頂上張望疯趟。 院中可真熱鬧,春花似錦谋梭、人聲如沸信峻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盹舞。三九已至产镐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踢步,已是汗流浹背癣亚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留获印,地道東北人述雾。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兼丰,于是被迫代替她去往敵國(guó)和親玻孟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容