前端模塊化開發(fā)

CommonJS

服務器端的 Node.js 遵循 CommonJS規(guī)范浪箭,該規(guī)范的核心思想是允許模塊通過 require 方法來同步加載所要依賴的其他模塊,然后通過 exportsmodule.exports 來導出需要暴露的接口。

使用

引入模塊

let express = require('express');

導出模塊

module.exports.test1 = function () {}
exports.test2 = {}

優(yōu)缺點

優(yōu)點

  • 服務器端模塊便于重用
  • NPM中已經(jīng)有超過45萬個可以使用的模塊包
  • 簡單并容易使用

缺點

  • 同步的模塊加載方式不適合瀏覽器環(huán)境键俱,同步意味著阻塞加載建椰,瀏覽器資源是異步加載的
  • 不能非阻塞的并行加載多個模塊

實現(xiàn)

  • 服務器端的 Node.js
  • Browserify,瀏覽器端的 CommonJS 實現(xiàn)薄腻,可以使用 NPM 的模塊收捣,但是編譯打包后的文件體積可能很大
  • modules-webmake庵楷,類似Browserify楣颠,還不如 Browserify 靈活
  • wreq,Browserify 的前身

AMD

Asynchronous Module Definition 規(guī)范其實只有一個主要接口咐蚯,define(id?, dependencies?, factory),它要在聲明模塊的時候指定所有的依賴dependencies春锋,并且還要當做形參傳到factory中矫膨,對于依賴的模塊提前執(zhí)行,依賴前置期奔。

使用

定義模塊

define('module', ['dep1', 'dep2'], function (d1, d2) {
    return {}
});

引入模塊

require(['module', '../file'], funtion(module, file) {
    // ...
})

優(yōu)缺點

優(yōu)點

  • 適合在瀏覽器環(huán)境中異步加載模塊
  • 可以并行加載多個模塊

缺點

  • 提高了開發(fā)成本侧馅,代碼的閱讀和書寫比較困難,模塊定義方式的語義不順暢

  • 不符合通用的模塊化思維方式呐萌,是一種妥協(xié)的實現(xiàn)

    ?

實現(xiàn)

CMD

Common Module Definition 規(guī)范和 AMD 很相似馁痴,盡量保持簡單,并與 CommonJS 和 Node.js 的 Modules 規(guī)范保持了很大的兼容性肺孤。

使用

定義

define(function (require, exports, module) {
    var $ = require('jquery');
    var Sprinning = require('./spinning');
    exports.test1 = {};
    module.exports = {};
});

引入

define(function (require, exports, module) {
    var $ = require('jquery');
    $('div')...
});

優(yōu)缺點

優(yōu)點

  • 依賴就近罗晕,延遲執(zhí)行
  • 可以很容易在Node.js中運行

缺點

  • 依賴SPM打包,模塊的加載邏輯偏重

實現(xiàn)

ES6 模塊

EcmaScript6 標準增加了 JavaScript 語言層面的模塊體系定義赠堵。ES6 模塊的設計思想小渊,是盡量的靜態(tài)化,使得編譯時就能確定模塊的依賴關系顾腊,以及輸入和輸出的變量粤铭。CommonJS 和 AMD 模塊,都只能在運行時確定這些東西杂靶。

使用

定義

export default {
    a: 10,
    b: function () {
        // ...
    }
}

引入

import 'jquery';
import Vue from 'vue'
import { render } from 'react-dom'

優(yōu)缺點

優(yōu)點

  • 容易進行靜態(tài)分析
  • 面向未來的ECMAScript標準

缺點

  • 原生瀏覽器還沒有實現(xiàn)標準

  • 全新的命令字梆惯,新版的Node.js才支持

    ?

實現(xiàn)

期望的模塊系統(tǒng)

可以兼容多種模塊風格,盡量可以利用已有的代碼吗垮,不僅僅只是 JavaScript 模塊化垛吗,還有 CSS、圖片烁登、字體等資源也需要模塊化怯屉。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饵沧,隨后出現(xiàn)的幾起案子锨络,更是在濱河造成了極大的恐慌,老刑警劉巖狼牺,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡儿,死亡現(xiàn)場離奇詭異,居然都是意外死亡是钥,警方通過查閱死者的電腦和手機掠归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門缅叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虏冻,你說我怎么就攤上這事肤粱。” “怎么了厨相?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵领曼,是天一觀的道長。 經(jīng)常有香客問我领铐,道長悯森,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮祝蝠,結果婚禮上,老公的妹妹穿的比我還像新娘绎狭。我一直安慰自己,他們只是感情好喇聊,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布蹦狂。 她就那樣靜靜地躺著,像睡著了一般窜骄。 火紅的嫁衣襯著肌膚如雪摆屯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天准验,我揣著相機與錄音廷没,去河邊找鬼。 笑死济似,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的砰蠢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼律杠,長吁一口氣:“原來是場噩夢啊……” “哼竞惋!你這毒婦竟也來了?” 一聲冷哼從身側響起嗓奢,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤浑厚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后物蝙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敢艰,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年震嫉,在試婚紗的時候發(fā)現(xiàn)自己被綠了责掏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡换衬,死狀恐怖瞳浦,靈堂內(nèi)的尸體忽然破棺而出废士,到底是詐尸還是另有隱情,我是刑警寧澤官硝,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站傻咖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卿操。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一扇雕、第九天 我趴在偏房一處隱蔽的房頂上張望窥摄。 院中可真熱鬧,春花似錦腮鞍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽使碾。三九已至,卻和暖如春票摇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢门。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工祟剔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人物延。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓叛薯,卻偏偏與公主長得像笙纤,于是被迫代替她去往敵國和親组力。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 前端模塊化開發(fā) 常見的三大模塊化框架蓉冈。 CommonJS: 1.根據(jù)CommonJS規(guī)范轩触,一個單獨的文件就是一個模...
    一長亭閱讀 334評論 0 2
  • 標簽(空格分隔): npm和bower的區(qū)別 前端包管理器 序 前端富應用時代,寫代碼脱柱,基本不會從底層自己開始造輪...
    麥殼兒UIandFE2閱讀 5,924評論 0 14
  • js模塊化開發(fā)的價值 前端模塊化開發(fā)的價值 通過 exports暴露接口。這意味著不需要命名空間了惨好,更不需要全局變...
    darr250閱讀 376評論 0 1
  • JS中的模塊規(guī)范(CommonJS龄句,AMD,CMD)分歇,如果你聽過js模塊化這個東西,那么你就應該聽過或Common...
    小蝦米前端閱讀 4,392評論 0 12
  • 九宮格我,狗蹄胰,鏡孔 一天,黑夜裕寨。我靜靜的在房屋外寫著作業(yè),突然宾袜。 門外,傳來庆猫,咚咚的響聲。我很害怕月培。想會...
    張墨涵閱讀 372評論 1 1