第 2 章 模块系统
在第 1 章 Node.js 平台 中,我们简要介绍了模块在 Node.js 中的重要性。我们讨论了模块如何在定义 Node.js 理念及其编程体验的一些支柱方面发挥重要作用。但是,当我们谈论模块时,它们究竟是什么意思?
一般来说,模块是构建非复杂应用程序的砖块。通过模块,您可以将代码库划分为可以独立开发和测试的小单元。模块也是执行信息隐藏的主要机制,它将所有未明确标记为导出的函数和变量保持私有。
如果你来自其他语言,你可能会看到类似的概念有不同的名称:包(Java、Go、PHP、Rust 或 Dart)、程序集(.NET)、库(Ruby)或单元(Pascal 方言)。这些术语并不能完全互换,因为每种语言或生态系统都有自己独特的特点,但这些概念之间有很大的重叠。
有趣的是,Node.js 目前有两种不同的模块系统: CommonJS (CJS) 和 ECMAScript 模块(ESM 或 ES 模块)。在本章中,我们将讨论为什么会有两种选择,了解它们的优缺点,最后分析在使用或编写 Node.js 模块时相关的几种常见模式。本章结束时,您应该能够就如何有效使用模块以及如何编写自己的自定义模块做出务实的选择。
掌握 Node.js 的模块系统和模块模式非常重要,因为在本书的其他章节中,我们都将依赖这些知识。
总之,这些就是我们将在本章讨论的主要话题:
-
为什么模块是必需的以及 Node.js 中可用的不同模块系统
-
CommonJS 内部结构和模块模式
-
Node.js 中的 ES 模块 (ESM)
-
CommonJS 和 ESM 之间的差异和互操作性
让我们从为什么需要模块开始。