6种 JavaScript 模块输出选项

在前端开发中,为了提高代码的可维护性和重用性,我们通常使用模块化的方式组织代码。JavaScript模块可以通过不同的输出选项来实现模块的导出和引入。本文将介绍常见的六种 JavaScript 模块输出选项,包括 CommonJS、ES6、AMD、UMD、SystemJS 和 Closure Compiler。

1. CommonJS

CommonJS 是 Node.js 最早采用的模块系统,它定义了一个 module 对象和一个 exports 对象,通过给 exports 对象添加属性或方法来导出模块,通过 require 函数来引入模块。

导出示例

-- ---------
-------- ------ -- -
  ------ - - --
-

-------------- - ----

引入示例

-- --------
----- --- - --------------------

------------------ ---- -- -- -

2. ES6 Module

ES6 模块是 ECMAScript 2015 标准中新增的模块化方式,它使用 export 关键字导出模块,使用 import 关键字引入模块。

导出示例

-- ---------
------ -------- ------ -- -
  ------ - - --
-

引入示例

-- --------
------ - --- - ---- -----------

------------------ ---- -- -- -

3. AMD

AMD(Asynchronous Module Definition)是一种在浏览器端异步加载模块的规范,它使用 define 函数定义模块,使用 require 函数引入模块。

导出示例

-- ---------
--------------- -- -
  -------- ------ -- -
    ------ - - --
  -

  ------ -
    ---- ---
  --
---

引入示例

-- --------
--------------------- -------- -------- -
  ------------------------- ---- -- -- -
---

4. UMD

UMD(Universal Module Definition)是一种兼容 CommonJS 和 AMD 的模块化方式,它可以在不同的环境中使用。

导出示例

-- ---------
--------- ------ -------- -
  -- ------- ------ --- ---------- -- ----------- -
    ---------- ---------
  - ---- -- ------- ------- --- --------- -
    -------------- - ----------
  - ---- -
    -------- - ----------
  -
------- -------- -- -
  -------- ------ -- -
    ------ - - --
  -

  ------ -
    ---- ---
  --
----

引入示例

-- --------
--- --- - ----------------------- -- ----

------------------ ---- -- -- -

5. SystemJS

SystemJS 是一个支持多种模块格式的动态模块加载器,它可以在浏览器端和 Node.js 中使用。

导出示例

-- ---------
------------------- -------- --------- -
  -------------- -------- --- -- -
    ------ - - --
  ---

  ------ -
    -------- ---
    -------- -------- -- --
  --
---

引入示例

-- --------
--------------------------------------- -------- -
  ------------------------- ---- -- -- -
----------------- ----- -
  -----------------
---

6. Closure Compiler

Closure Compiler 是 Google 开源的 JavaScript 编译器,它可以将 JavaScript 模块编译成一个单独的文件,提高代码的执行效率。

导出示例

-- ---------
------------------------

-------- ------ -- -
  ------ - - --
-

------- - - --- --

引入示例

-- --------

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------