CommonJS和ES Module

首先:Tree Shaking只支持ES模塊的使用犁苏,不支持require這種動(dòng)態(tài)引入模塊的方式硬萍。

CommonJS ESModule
輸出的是值的淺拷貝 輸出的是值的引用
動(dòng)態(tài)引入、運(yùn)行時(shí)加載 靜態(tài)引入围详、編譯時(shí)執(zhí)行
require() 是同步加載模塊 import是異步加載模塊朴乖,靜態(tài)編譯時(shí)加載,有獨(dú)立的模塊依賴解析

exports和module.export區(qū)別:

  • exports:對(duì)于本身來(lái)講是一個(gè)變量(對(duì)象)助赞,它不是module的引用买羞,它是{}的引用,它指向module.exports的{}模塊雹食。默認(rèn)指向 module.exports 的內(nèi)存空間畜普,只能使用.語(yǔ)法 向外暴露變量。
  • module.exports:module是一個(gè)變量群叶,指向一塊內(nèi)存吃挑,exports是module中的一個(gè)屬性,存儲(chǔ)在內(nèi)存中街立,然后exports屬性指向{}模塊舶衬。既可以使用.語(yǔ)法,也可以使用=直接賦值赎离。
    require() 返回的是 module.exports 而不是 exports

CommonJS用同步的方式加載模塊逛犹。在服務(wù)端,模塊文件都存放在本地磁盤,讀取非乘浠快舞蔽,所以這樣做不會(huì)有問(wèn)題。但是在瀏覽器端码撰,限于網(wǎng)絡(luò)原因渗柿,更合理的方案是使用異步加載。

ES6的模塊不是對(duì)象脖岛,import命令會(huì)被 JavaScript 引擎靜態(tài)分析做祝,在編譯時(shí)就引入模塊代碼,而不是在代碼運(yùn)行時(shí)加載鸡岗,所以無(wú)法實(shí)現(xiàn)條件加載混槐。也正因?yàn)檫@個(gè),使得靜態(tài)分析成為可能轩性。

CommonJS 模塊輸出的是一個(gè)值的拷貝声登,ES6 模塊輸出的是值的引用

  • CommonJS 模塊輸出的是值的拷貝,也就是說(shuō)揣苏,一旦輸出一個(gè)值悯嗓,模塊內(nèi)部的變化就影響不到這個(gè)值。
  • ES6 模塊的運(yùn)行機(jī)制與 CommonJS 不一樣卸察。JS 引擎對(duì)腳本靜態(tài)分析的時(shí)候脯厨,遇到模塊加載命令import,就會(huì)生成一個(gè)只讀引用坑质。等到腳本真正執(zhí)行時(shí)合武,再根據(jù)這個(gè)只讀引用,到被加載的那個(gè)模塊里面去取值涡扼。換句話說(shuō)稼跳,ES6 的import有點(diǎn)像 Unix 系統(tǒng)的“符號(hào)連接”,原始值變了吃沪,import加載的值也會(huì)跟著變汤善。因此,ES6 模塊是動(dòng)態(tài)引用票彪,并且不會(huì)緩存值红淡,模塊里面的變量綁定其所在的模塊。

CommonJS 模塊是運(yùn)行時(shí)加載降铸,ES6 模塊是編譯時(shí)輸出接口

CommonJS 加載的是一個(gè)對(duì)象(即module.exports屬性)在旱,該對(duì)象只有在腳本運(yùn)行完才會(huì)生成。而 ES6 模塊不是對(duì)象垮耳,它的對(duì)外接口只是一種靜態(tài)定義颈渊,在代碼靜態(tài)解析階段就會(huì)生成。

  • 運(yùn)行時(shí)加載: CommonJS 模塊就是對(duì)象终佛;即在輸入時(shí)是先加載整個(gè)模塊俊嗽,生成一個(gè)對(duì)象,淺拷貝緩存到內(nèi)存中铃彰,然后再?gòu)倪@個(gè)對(duì)象上面讀取方法绍豁,這種加載稱為“運(yùn)行時(shí)加載”。下次加載文件時(shí)牙捉,直接從內(nèi)存中取值竹揍。
  • 編譯時(shí)加載: ES6 模塊不是對(duì)象,而是通過(guò) export 命令顯式指定輸出的代碼邪铲,import時(shí)采用靜態(tài)命令的形式芬位。即在import時(shí)可以指定加載某個(gè)輸出值,而不是加載整個(gè)模塊带到,這種加載稱為“編譯時(shí)加載”昧碉。模塊內(nèi)部引用的變化,會(huì)反應(yīng)在外部揽惹。
  • ES Module 是編譯時(shí)執(zhí)行被饿,而 CommonJS 模塊是在運(yùn)行時(shí)加載;
    ES Module 最大的特點(diǎn)就是靜態(tài)化,在編譯時(shí)就能確定模塊的依賴關(guān)系搪搏,以及輸入和輸出的值狭握,這意味著模塊的依賴關(guān)系是確定的,和運(yùn)行時(shí)的狀態(tài)無(wú)關(guān)疯溺,可以進(jìn)行可靠的靜態(tài)分析论颅,正是基于這個(gè)基礎(chǔ),才使得 Tree-Shaking 成為可能!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囱嫩,一起剝皮案震驚了整個(gè)濱河市嗅辣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挠说,老刑警劉巖澡谭,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異损俭,居然都是意外死亡蛙奖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門杆兵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雁仲,“玉大人,你說(shuō)我怎么就攤上這事琐脏≡茏” “怎么了缸兔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吹艇。 經(jīng)常有香客問(wèn)我惰蜜,道長(zhǎng),這世上最難降的妖魔是什么受神? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任抛猖,我火速辦了婚禮,結(jié)果婚禮上鼻听,老公的妹妹穿的比我還像新娘财著。我一直安慰自己,他們只是感情好撑碴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布撑教。 她就那樣靜靜地躺著,像睡著了一般醉拓。 火紅的嫁衣襯著肌膚如雪驮履。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天廉嚼,我揣著相機(jī)與錄音玫镐,去河邊找鬼。 笑死怠噪,一個(gè)胖子當(dāng)著我的面吹牛恐似,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傍念,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矫夷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了憋槐?” 一聲冷哼從身側(cè)響起双藕,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阳仔,沒(méi)想到半個(gè)月后忧陪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近范,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年嘶摊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片评矩。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叶堆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斥杜,到底是詐尸還是另有隱情虱颗,我是刑警寧澤沥匈,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站忘渔,受9級(jí)特大地震影響高帖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辨萍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望返弹。 院中可真熱鬧锈玉,春花似錦、人聲如沸义起。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)默终。三九已至椅棺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齐蔽,已是汗流浹背两疚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留含滴,地道東北人诱渤。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谈况,于是被迫代替她去往敵國(guó)和親勺美。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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