🎯 第 4 课:模块系统入门 —— `require` 和 `module.exports`

5 阅读2分钟

📌 核心知识点:
Node.js 中每个文件都是一个独立的模块,使用 require 引入其他模块,用 module.exports 导出内容。


🧱 为什么需要模块?

想象你写一个大程序,所有代码都堆在一个文件里:

  • 难以阅读
  • 不好维护
  • 多人协作困难

👉 所以我们需要“拆分”代码 —— 就像把一本书分成章节。

Node.js 的解决方案就是:模块化(Module System)


📁 模块的基本规则:

  1. 每一个 .js 文件就是一个模块
  2. 模块内部的变量、函数默认是私有的,外部无法访问
  3. 如果你想让别人用你的代码,就要用 module.exports 导出
  4. 如果你想用别人的代码,就用 require 引入

🧪 动手实践:创建两个文件

步骤 1:创建 math.js —— 一个数学工具模块

// math.js
function add(a, b) {
  return a + b;
}

function multiply(a, b) {
  return a * b;
}

// 把这两个函数导出,供别人使用
module.exports = {
  add: add,
  multiply: multiply
};

💡 解释:module.exports 是 Node.js 提供的对象,用来指定这个文件要对外暴露的内容。

✅ 简写小技巧:ES6 支持属性简写,所以上面也可以写成:

module.exports = { add, multiply };

步骤 2:创建 app.js —— 主程序,引入并使用它

// app.js
const math = require('./math'); // 注意:必须加 './' 表示当前目录下的文件

console.log(math.add(2, 3));      // 输出: 5
console.log(math.multiply(4, 5)); // 输出: 20

📌 关键点:

  • require('./math') 不需要写 .js 后缀,Node.js 会自动查找。
  • ./ 表示相对路径,说明不是内置模块也不是第三方模块。

步骤 3:运行程序

在终端执行:

node app.js

输出结果:

5
20

🎉 成功!你已经实现了模块之间的通信!


🔧 补充:三种 require 的类型

类型示例说明
自定义模块require('./my-module')自己写的文件,必须带路径
内置模块require('fs')Node.js 自带的,如 fs, path, http
第三方模块require('express')npm 安装的库(后面会讲)

✅ 小结一句话:

在 Node.js 中,用 module.exports 导出功能,用 require 引入别人的功能,实现代码复用和组织。


📬 下一课预告:
第 5 课:CommonJS 模块规范 —— 理解 require 的工作原理与同步加载机制