模塊系統(tǒng) <script> CommonJs ES6 區(qū)別&寫法

首先是前端是基于多語言、多層次的編碼和組織工作,其次前端產(chǎn)品的交付是基于瀏覽器均唉,這些資源是通過增量加載的方式運(yùn)行到瀏覽器端。

如何在開發(fā)環(huán)境組織好這些碎片化的代碼和資源肚菠,并且保證他們?cè)跒g覽器端快速舔箭、優(yōu)雅的加載和更新,就需要一個(gè)模塊化系統(tǒng)蚊逢。

<script>標(biāo)簽

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

這是最原始的 JavaScript 文件加載方式层扶,如果把每一個(gè)文件看做是一個(gè)模塊,那么他們的接口通常是暴露在全局作用域下烙荷,也就是定義在 window對(duì)象中镜会,不同模塊的接口調(diào)用都是一個(gè)作用域中。

缺點(diǎn):

  • 全局作用域下容易造成變量沖突
  • 文件只能按照 <script>的書寫順序進(jìn)行加載
  • 開發(fā)人員必須主觀解決模塊和代碼庫(kù)的依賴關(guān)系
  • 在大型項(xiàng)目中各種資源難以管理终抽,長(zhǎng)期積累的問題導(dǎo)致代碼庫(kù)混亂不堪

CommonJS

該規(guī)范的核心思想是允許模塊通過 require 方法來同步加載所要依賴的其他模塊戳表,然后通過 exports 或 module.exports 來導(dǎo)出需要暴露的接口焰薄。

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

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

  • 服務(wù)器端模塊便于重用
  • NPM 中已經(jīng)有將近20萬個(gè)可以使用模塊包
  • 簡(jiǎn)單并容易使用

缺點(diǎn):

  • 同步的模塊加載方式不適合在瀏覽器環(huán)境中,同步意味著阻塞加載扒袖,瀏覽器資源是異步加載的
  • 不能非阻塞的并行加載多個(gè)模塊

實(shí)現(xiàn):

  • 服務(wù)器端的 Node.js
  • Browserify塞茅,瀏覽器端的 CommonJS 實(shí)現(xiàn),可以使用 NPM 的模塊季率,但是編譯打包后的文件體積可能很大
  • modules-webmake野瘦,類似Browserify,還不如 Browserify 靈活
  • wreq飒泻,Browserify 的前身

友情小Tips:服務(wù)器端的 Node.js 遵循 CommonJS規(guī)范鞭光,在ES6標(biāo)準(zhǔn)發(fā)布后module成為標(biāo)準(zhǔn)。標(biāo)準(zhǔn)的使用export指令導(dǎo)出接口泞遗,以import引入模塊惰许,但是在我們一貫的node模塊中,我們?nèi)匀徊捎肅ommonJs規(guī)范史辙。
nodejs v6+ 開始支持 90% 以上的 ES6汹买,however,import還暫不支持聊倔。

ES6 模塊

EcmaScript6 標(biāo)準(zhǔn)增加了 JavaScript 語言層面的模塊體系定義晦毙。ES6 模塊的設(shè)計(jì)思想,是盡量的靜態(tài)化耙蔑,使得編譯時(shí)就能確定模塊的依賴關(guān)系见妒,以及輸入和輸出的變量。CommonJS 和 AMD 模塊甸陌,都只能在運(yùn)行時(shí)確定這些東西须揣。

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

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

  • 容易進(jìn)行靜態(tài)分析
  • 面向未來的 EcmaScript 標(biāo)準(zhǔn)

缺點(diǎn):

  • 原生瀏覽器端還沒有實(shí)現(xiàn)該標(biāo)準(zhǔn)
    *全新的命令字,新版的 Node.js才支持

實(shí)現(xiàn):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钱豁,一起剝皮案震驚了整個(gè)濱河市耻卡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寥院,老刑警劉巖劲赠,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涛目,死亡現(xiàn)場(chǎng)離奇詭異秸谢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)霹肝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門估蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沫换,你說我怎么就攤上這事臭蚁。” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵垮兑,是天一觀的道長(zhǎng)冷尉。 經(jīng)常有香客問我,道長(zhǎng)系枪,這世上最難降的妖魔是什么雀哨? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮私爷,結(jié)果婚禮上雾棺,老公的妹妹穿的比我還像新娘。我一直安慰自己衬浑,他們只是感情好捌浩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著工秩,像睡著了一般尸饺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上助币,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天侵佃,我揣著相機(jī)與錄音,去河邊找鬼奠支。 笑死馋辈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倍谜。 我是一名探鬼主播迈螟,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼尔崔!你這毒婦竟也來了答毫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤季春,失蹤者是張志新(化名)和其女友劉穎洗搂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载弄,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耘拇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宇攻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惫叛。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逞刷,靈堂內(nèi)的尸體忽然破棺而出嘉涌,到底是詐尸還是另有隱情妻熊,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布仑最,位于F島的核電站扔役,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏警医。R本人自食惡果不足惜厅目,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望法严。 院中可真熱鬧损敷,春花似錦、人聲如沸深啤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溯街。三九已至诱桂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呈昔,已是汗流浹背挥等。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堤尾,地道東北人肝劲。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像郭宝,于是被迫代替她去往敵國(guó)和親辞槐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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