在日常开发中,涉及到多人协作,复杂的软件开发时,代码直接被通过复制粘贴的方式运用到整个项目中时,会导致代码难以维护和修改。
为了解决这个问题,模块化编程的概念诞生了。
模块系统是指代码组织结构的一种模式,通过模块化的方式将代码分为独立的模块,以提高代码复用性和可维护性。模块系统使得大型应用程序可以被分解成小的、独立的部分,每个部分解决一个特定的问题这样做既有助于协同开发大型应用,也能够使得交付的应用程序体积更加小巧。
模块化允许代码分离,将其组织为可维护的单元,提升代码的可复用性和可读性。
前端在没有模块化规范的早期时代,代码通常是下面这样的,直接使用内联脚本。
```html
```
但随着 js 能做的事越来越多,代码量越来越大,这种方式就不太合适了,于是我们开始使用外联脚本。
```html
```
但随着项目越来越大,我们需要引入的外联脚本越来越多,管理越来越困难,相互依赖关系越来越复杂,需要严格的遵循引入顺序,
没有模块化标准的问题就暴露出来了,于是 CommonJS、AMD、CMD、UMD、ESM
等模块化标准相继诞生。
早期的编程语言,如 C 语言,通常采用函数库的形式实现模块化,随着面向对象编程的兴起,类和对象被广泛应用于模块化设计。
Node.js 在早期就采用了 CommonJS
规范实现了模块化,而 Web (浏览器) 中的 JS,在发展过程中诞生了 ECMAScript 标准
,在 ES6(ES2015) 中才推出了 ECMAScript Modules
规范。
PS:
ECMAScript
是一种由 Ecma 国际组织制定的脚本语言标准,也被称为 ECMA-262 标准。它定义了 JavaScript 的语法、类型、对象和行为规范,提供了一种通用的、跨平台的脚本语言规范。
在2015年 (ES2015/ES6) 发布较大更新后,此后每年都会发布一些新的特性的更新,具体可通过 ES Table 查看。
Node.js 不同版本对 ES 特性的支持情况,可以通过node-compat-table 查看
时至今日,Node.js 的模块系统也支持了 ESM
语法,于是,我们可以在 Node.js
中使用 CJS 和 ESM 两种模块系统。
接下来将分别介绍 CJS(CommonJS)
和 ESM(ECMAScript Modules)
两种模块系统的用法,以及其异同。
在后续的教程中,示例代码会以 ESM 为主,这个也是现在开发中最常用的方式。