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
- 可导出对象、函数、类等任意类型
- 使用解构或别名简化引入
📝 发现内容有误?点击此处直接编辑