AMD,CMD,Commonjs和es6區別

隨着 JavaScript 代碼複雜度的提高,JavaScript模塊化這個概念便被提出來,前端社區也不斷地實現前端模塊化,直到 es6 對其進行了規範,下面就介紹 JavaScript 模塊化。本文基於以下要點進行展開

  1. 什麼是AMD,CMD,CommonJS
  2. AMD,CMD,CommonJS 的區別
  3. 應用項目中怎麼使用

1、AMD

AMD是RequireJS在推廣過程中對模塊定義的規範化產出,AMD規範則是非同步加載模塊,允許指定回調函數。

AMD標準中,定義了下面兩個API:

  1. require([module], callback)
  2. define(id, [depends], callback)

即通過define來定義一個模塊,然後使用 require 來加載一個模塊。 並且,require 還支持CommonJS 的模塊導出方式。

a.js
define(['package/b',...], function(b) {
    function func1 () {
        b.sayHi('hello world');
    }

    return {
      func1: func1
    }
});

require(['a'], function(a) {
  a.func1()
})

2、CMD

CMD是SeaJS在推廣過程中對模塊定義的規範化產出。CMD是同步模塊定義。

//所有模塊都通過define來定義
define(function(require, exports, module) {  
  // 通過require引入依賴
  var $ = require('jquery');
  var C = require('./c.js');
  exports.sayHi = ...
  module.exports = ...
})

二者的區別是前者是對於依賴的模塊提前執行,而後者是延遲執行。 前者推崇依賴前置,而後者推崇依賴就近,即只在需要用到某個模塊的時候再 require。

3、CommonJS 規範---module.exports

前端瀏覽器不支持,Nodejs中使用的是這個規範

exports.sum = function(a,b) {
   return a + b;
}
exports.count= function(arr) {
   return arr.length;
}

CommonJS的核心思想就是通過 require 方法來同步加載所要依賴的其他模塊,然後通過 exports 或者 module.exports 來導出需要暴露的接口。

4、ES6---export/import

在ES6中,我們可以使用 import 關鍵字引入模塊,通過 exprot 關鍵字導出模塊,功能較之於前幾個方案更爲強大,也是我們所推崇的,但是由於ES6目前無法在瀏覽器中執行,所以,我們只能通過babel將不被支持的import編譯爲當前受到廣泛支持的 require

import Home from './Home.vue'
export default {
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章