Node.js 模块系统学习笔记

什么是模块?

在 Node.js 中,代码被组织成模块。模块是 Node.js 中重要的概念之一,它将相关的代码组织到一个文件或多个文件中,便于代码的维护和重用。

Node.js 中的模块可以通过 require 函数引入到其他模块中使用,也可以使用 exports 对象暴露模块中的函数或变量供外部模块使用。

模块的分类

Node.js 中的模块可以分为以下两类:

  • 核心模块(Core Modules)
  • 文件模块(File Modules)

核心模块

核心模块是 Node.js 内置的模块,可以直接使用而无需通过 npm 安装。例如,fshttp 等模块都属于核心模块。

使用核心模块时,只需要传入模块名称即可,例如:

javascriptCopy Code
const http = require('http')

文件模块

文件模块是自定义的模块,可以在项目中创建自己的模块文件,并通过 require 函数来引入。

这里举一个例子,假设我们有一个名为 math.js 的模块文件,其中包含了两个函数:addmultiply,代码如下:

javascriptCopy Code
function add(x, y) { return x + y } function multiply(x, y) { return x * y } // 通过 exports 对象暴露模块中的函数 exports.add = add exports.multiply = multiply

然后,在其他文件中就可以通过 require 函数来引入并使用该模块中的函数:

javascriptCopy Code
const math = require('./math.js') console.log(math.add(1, 2)) // 输出 3 console.log(math.multiply(3, 4)) // 输出 12

模块的加载顺序

在 Node.js 中,模块的加载顺序是以深度优先遍历的方式进行的。例如,假设我们有以下代码:

javascriptCopy Code
const a = require('./a.js')

其中,a.js 又引入了另一个模块 b.js,那么加载顺序将会是:a.js -> b.js

模块缓存

在第一次引入模块时,Node.js 会将其缓存在内存中,以便在后续调用中直接返回已经加载过的模块对象,而不需要重新执行模块代码。因此,多次引入同一个模块时,只会执行一次模块代码。

总结

本文介绍了 Node.js 中的模块系统,包括模块的定义、分类、加载顺序以及模块缓存等方面。通过学习本文,相信你已经掌握了 Node.js 中模块系统的基本知识,可以更好地组织和重用自己的代码。