全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 7 分钟 ✍️ juanwangdev

Node.js require 与 module.exports

require 和 module.exports 是 Node.js 模块导入导出的核心 API。

module.exports 基础

JavaScript
// 导出对象
module.exports = {
  name: 'utils',
  add: (a, b) => a + b
};

// 使用
const utils = require('./utils');
console.log(utils.name);  // utils
console.log(utils.add(1, 2)); // 3

导出类型

导出对象

JavaScript
// config.js
module.exports = {
  port: 3000,
  db: {
    host: 'localhost',
    port: 3306
  }
};

导出函数

JavaScript
// logger.js
module.exports = function(message) {
  console.log(`[${new Date().toISOString()}] ${message}`);
};

// 使用
const log = require('./logger');
log('系统启动');

导出类

JavaScript
// User.js
module.exports = class User {
  constructor(name) {
    this.name = name;
  }

  greet() {
    return `Hello, ${this.name}`;
  }
};

// 使用
const User = require('./User');
const user = new User('Tom');

导出多个函数

JavaScript
// math.js
module.exports.add = (a, b) => a + b;
module.exports.subtract = (a, b) => a - b;
module.exports.multiply = (a, b) => a * b;

// 或使用 exports 简写
exports.add = (a, b) => a + b;
exports.subtract = (a, b) => a - b;

require 基础

JavaScript
// 引入并使用
const fs = require('fs');
const path = require('path');
const utils = require('./utils');

// require 返回 module.exports 的值

引入方式

解构引入

JavaScript
// math.js
module.exports = { add, subtract, multiply };

// app.js
const { add, subtract } = require('./math');
console.log(add(1, 2));

整体引入

JavaScript
const math = require('./math');
console.log(math.add(1, 2));
console.log(math.subtract(3, 1));

别名引入

JavaScript
const { add: sum } = require('./math');
console.log(sum(1, 2));

// 或
const math = require('./math');
const sum = math.add;

require 参数类型

核心模块名

JavaScript
const fs = require('fs');
const http = require('http');
const path = require('path');

相对路径

JavaScript
const utils = require('./utils');    // 当前目录
const config = require('../config'); // 上级目录
const data = require('./data/users'); // 子目录

绝对路径

JavaScript
const config = require('/home/user/project/config');

第三方模块名

JavaScript
const express = require('express');
const lodash = require('lodash');

require 与 exports 的关系

JavaScript
// 初始状态
// module.exports = {}
// exports = module.exports(引用)

// 添加属性时
exports.a = 1;         // module.exports.a = 1
exports.b = 2;         // module.exports.b = 2

// require 返回 module.exports
const mod = require('./mod');
// mod = { a: 1, b: 2 }

重新赋值的影响

JavaScript
// ❌ 错误示例
exports = { a: 1 };    // exports 不再指向 module.exports
module.exports = { b: 2 };
// require 返回 { b: 2 },exports.a 丢失

// ✅ 正确示例
exports.a = 1;         // 添加到 module.exports
module.exports.b = 2;  // 添加到 module.exports
// require 返回 { a: 1, b: 2 }

导出多个内容的方式

JavaScript
// 方式1:对象属性
module.exports = {
  func1: () => {},
  func2: () => {},
  data: {}
};

// 方式2:逐个添加
exports.func1 = () => {};
exports.func2 = () => {};
exports.data = {};

// 方式3:先定义后导出
function func1() {}
function func2() {}
const data = {};

module.exports = { func1, func2, data };

要点总结

  • module.exports 是真正的导出对象
  • exports 是 module.exports 的引用,只能添加属性
  • require 返回目标模块的 module.exports
  • 可导出对象、函数、类等任意类型
  • 使用解构或别名简化引入

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js npm 包管理
下一篇 → Node.js 内置模块
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库