多種模組格式,包括 ES, CommonJS, UMD, AMD, SystemJS 和 IIFE的區別點分別是什麼

居无常發表於2024-07-17

【轉】https://zhuanlan.zhihu.com/p/668530823

以下是各種模組格式的主要特點:

ES Modules (ESM):這是 ECMAScript 6 (ES6) 引入的官方標準格式。它支援匯入和匯出語句,以及靜態分析和 tree-shaking。它是唯一的靜態模組系統,意味著你可以在編譯時確定匯入和匯出的內容。

CommonJS (CJS):這是 Node.js 使用的模組系統。它使用 require() 來匯入模組,module.exports 或 exports 來匯出。它是動態的,可以在執行時載入模組,但不支援 tree-shaking。

UMD (Universal Module Definition):這種格式旨在相容 AMD 和 CommonJS,同時還能在全域性變數中執行。它通常用於讓庫能在各種環境中執行,包括瀏覽器和 Node.js。

AMD (Asynchronous Module Definition):這種格式主要用於瀏覽器,支援非同步載入和依賴管理。它使用 define() 函式來定義模組。

SystemJS:這是一個動態模組載入器,可以在瀏覽器中載入各種模組格式,包括 ES6、AMD、CommonJS 和全域性指令碼。

IIFE (Immediately Invoked Function Expression):這不是一個模組格式,而是一種 JavaScript 函式的執行方式。它建立一個立即執行的函式,通常用於避免全域性作用域的汙染。在打包工具中,IIFE 格式通常用於生成一個可以直接在瀏覽器中執行的自包含指令碼。

每種模組格式都有其適用的場景,選擇哪種格式取決於你的專案需求和目標環境。

相關文章