javascript模塊化比較

當(dāng)前有以下幾種JavaScript模塊化開(kāi)發(fā)方式:

  • <script>標(biāo)簽
  • CommonJS
  • AMD and 其他
  • ES6 modules
  • ...

<script>標(biāo)簽

<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>

不同模塊接口導(dǎo)出通過(guò)修改全局變量奸汇。例如添加到window變量上。
這種方式的缺點(diǎn):

  • 全局變量沖突
  • 依賴文件按序加載
  • 開(kāi)發(fā)者需要關(guān)心不同模塊之間的依賴關(guān)系
  • 項(xiàng)目較大時(shí)椎木,管理很困難

CommonJs:同步加載require

require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;

該方式:定義一個(gè)同步require方法邦投,加載依賴醉冤,同時(shí)返回需要導(dǎo)出接口。
eg. node.js

優(yōu)點(diǎn)

  • 服務(wù)端模塊可以復(fù)用
  • 已經(jīng)有很多npm包
  • 使用很簡(jiǎn)單

缺點(diǎn)

  • 不太適用于瀏覽器端:由于模塊都放在服務(wù)器端,對(duì)于瀏覽器僧凤,必須等待依賴模塊加載完成豆巨,才能執(zhí)行后續(xù)代碼剩辟。等待時(shí)間取決于網(wǎng)速的快慢,可能要等很長(zhǎng)時(shí)間往扔,瀏覽器處于“假死”狀態(tài)贩猎。

AMD:異步加載require

require(["module", "../file"], function(module, file) { /* ... */ });
define("mymodule", ["dep1", "dep2"], function(d1, d2) {
  return someExportedValue;
});

優(yōu)點(diǎn)

  • 適用于瀏覽器端
  • 多模塊并行加載

缺點(diǎn)

  • 有一定的編碼開(kāi)銷
  • 可讀性較差,寫(xiě)起來(lái)也麻煩

ES6模塊

import "jquery";
export function doStuff() {}
module "localModule" {}

優(yōu)點(diǎn)

  • 未來(lái)ES的發(fā)展趨勢(shì)
  • 靜態(tài)分析比較容易

缺點(diǎn)

  • 瀏覽器原生支持尚需時(shí)日
  • 模塊還比較少
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萍膛,一起剝皮案震驚了整個(gè)濱河市吭服,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝗罗,老刑警劉巖艇棕,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異串塑,居然都是意外死亡沼琉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門桩匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)打瘪,“玉大人,你說(shuō)我怎么就攤上這事傻昙」肷В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵妆档,是天一觀的道長(zhǎng)僻爽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贾惦,這世上最難降的妖魔是什么胸梆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任敦捧,我火速辦了婚禮,結(jié)果婚禮上乳绕,老公的妹妹穿的比我還像新娘绞惦。我一直安慰自己,他們只是感情好洋措,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布济蝉。 她就那樣靜靜地躺著,像睡著了一般菠发。 火紅的嫁衣襯著肌膚如雪王滤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天滓鸠,我揣著相機(jī)與錄音雁乡,去河邊找鬼。 笑死糜俗,一個(gè)胖子當(dāng)著我的面吹牛踱稍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悠抹,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼珠月,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了楔敌?” 一聲冷哼從身側(cè)響起啤挎,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卵凑,沒(méi)想到半個(gè)月后庆聘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勺卢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年伙判,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黑忱。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宴抚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杨何,到底是詐尸還是另有隱情酱塔,我是刑警寧澤沥邻,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布危虱,位于F島的核電站,受9級(jí)特大地震影響唐全,放射性物質(zhì)發(fā)生泄漏埃跷。R本人自食惡果不足惜蕊玷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弥雹。 院中可真熱鬧垃帅,春花似錦、人聲如沸剪勿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厕吉。三九已至酱固,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間头朱,已是汗流浹背运悲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留项钮,地道東北人班眯。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烁巫,于是被迫代替她去往敵國(guó)和親署隘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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