「JavaScript」如何讓你的插件兼容AMD, CMD 和 原生 JS

轉(zhuǎn)自https://segmentfault.com/a/1190000003732752

模塊標準

現(xiàn)在的前端模塊化標準主要有兩種绿贞, CMD , AMD 浅乔。

CMD

CMD 在模塊定義當中有三個變量,分別是 require , exports , module 舰讹。除了這三個變量可以辨識 CMD 外北苟, define 函數(shù)還有一個公有屬性 define.cmd 奏夫。我們也可以檢測這個值來判斷是否是 CMD 。

如果想要對外提供接口的話草慧,可以將接口綁定到 exports (即 module.exports ) 上桶蛔。

function MyModule() {
    // ...
}

if(typeof module !== `undefined` && typeof exports === `object` && define.cmd) {
    module.exports = MyModule;
}

如果需要支持除了 CMD 之外的其他符合 CommonJS 的標準,請去掉 define.cmd

AMD

AMD 規(guī)范中漫谷, define 函數(shù)同樣有一個公有屬性 define.amd 仔雷。

AMD 中的參數(shù)便是這個模塊的依賴。那么如何在 AMD 中提供接口呢舔示?它是返回一個對象碟婆,這個對象就作為這個模塊的接口,故我們可以這樣寫:

function MyModule() {
    // ...
}

if(typeof define === `function` && define.amd) {
    define(function() { return MyModule; });
}

總結(jié)

我們除了提供 AMD 模塊接口惕稻, CMD 模塊接口竖共,還得提供原生的 JS 接口,一個直接可以用的代碼如下:

;(function(){
    function MyModule() {
        // ...
    }
    var moduleName = MyModule;
    if (typeof module !== 'undefined' && typeof exports === 'object' && define.cmd) {
        module.exports = moduleName;
    } else if (typeof define === 'function' && define.amd) {
        define(function() { return moduleName; });
    } else {
        this.moduleName = moduleName;
    }
}).call(function() {
    return this || (typeof window !== 'undefined' ? window : global);
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俺祠,一起剝皮案震驚了整個濱河市公给,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜘渣,老刑警劉巖淌铐,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔫缸,居然都是意外死亡腿准,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門拾碌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吐葱,“玉大人,你說我怎么就攤上這事校翔〉芘埽” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵防症,是天一觀的道長窖认。 經(jīng)常有香客問我,道長告希,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任烧给,我火速辦了婚禮燕偶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘础嫡。我一直安慰自己指么,他們只是感情好酝惧,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伯诬,像睡著了一般晚唇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盗似,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天哩陕,我揣著相機與錄音,去河邊找鬼赫舒。 笑死悍及,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的接癌。 我是一名探鬼主播心赶,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缺猛!你這毒婦竟也來了缨叫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤荔燎,失蹤者是張志新(化名)和其女友劉穎耻姥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湖雹,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡咏闪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摔吏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸽嫂。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖征讲,靈堂內(nèi)的尸體忽然破棺而出据某,到底是詐尸還是另有隱情,我是刑警寧澤诗箍,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布癣籽,位于F島的核電站,受9級特大地震影響滤祖,放射性物質(zhì)發(fā)生泄漏筷狼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一匠童、第九天 我趴在偏房一處隱蔽的房頂上張望埂材。 院中可真熱鬧,春花似錦汤求、人聲如沸俏险。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竖独。三九已至裤唠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莹痢,已是汗流浹背种蘸。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留格二,地道東北人劈彪。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像顶猜,于是被迫代替她去往敵國和親沧奴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

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