AMD & ESModules 是什么?

在CommonJS中可以用require去加載模塊。
現(xiàn)在假設我們在web環(huán)境下,用require去加載模塊A。
但是模塊A由于網(wǎng)絡問題,使得加載速度很慢或者請求超時根本獲取不到。
由于js在瀏覽器端是異步加載的,最終這個沒有加載到的模塊A會導致后面依賴它的代碼出錯。
所以CommonJS 規(guī)范雖然適用于服務器端,但不適用于瀏覽器端。

AMD規(guī)范很好地解決了異步加載和依賴的問題,
AMD的全稱是Asynchronous Module Definition,即異步模塊加載機制。

AMD 例子:

1.定義模塊moduleB,模塊moduleB依賴于模塊moduleX

define('moduleB', ['./moduleX'], function(x){
  console.log(x);
  return {
    name: 'xxx'
  }
})

2.引用模塊moduleA

require(['./moduleA'], function(a){ 
  console.log(a.xxx);
})
//意思是函數(shù)依賴于moduleA,加載完后才再執(zhí)行。

結尾:

私人開發(fā)的規(guī)范:
CMD 應用于 seaJS (代碼有BUG,沒人維護,沒人使用)
AMD 應用于 requireJS (過時,但依然有人維護,有人使用)
CommonJS 應用于 NPM

官方開發(fā)的規(guī)范:
ESModules

ESModules是es6規(guī)范, 截止2017年8月,目前大部分瀏覽器不支持。
Node.js 從 8.5.0 開始原生支持 ES 模塊,不過還需要通過命令行參數(shù)控制。
8.5.0前的Node.js依然使用CommonJS。
ESModules 需要用babel轉(zhuǎn)換es6語法

2021年11月,目前主流的打包軟件都默認使用ESModules,所以請直接使用官方統(tǒng)一的規(guī)范ESModules,CMD和AMD已經(jīng)成為歷史

ESModules例子:
定義模塊moduleA:

let xxx = {};
export xxx;
let yyy = {};
export yyy;

引用模塊moduleA:

import {* as A} from './moduleA';

引用后的調(diào)用:

console.log(A.xxx);
console.log(A.yyy);

更多資料: 在 Node.js 中使用原生的 ES 模塊

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容