Node.js module 模块对象
module 是 Node.js 每个模块的局部对象,包含模块的元信息和导出配置。
基本概念
JavaScript
// 每个模块都有 module 对象
console.log(module);
// 输出示例:
// Module {
// id: '.',
// path: '/home/user/project',
// exports: {},
// filename: '/home/user/project/app.js',
// loaded: false,
// children: [],
// parent: null,
// paths: [...]
// }
module 常用属性
module.exports
JavaScript
// 导出单个值
module.exports = function add(a, b) {
return a + b;
};
// 导出对象
module.exports = {
name: 'utils',
version: '1.0.0',
add: (a, b) => a + b
};
module.id
JavaScript
// 入口模块的 id 为 '.'
console.log(module.id); // '.'
// 被引入模块的 id 为完整路径
// const utils = require('./utils');
// utils 模块中: module.id = '/home/user/project/utils.js'
module.filename
JavaScript
// 模块的完整路径(同 __filename)
console.log(module.filename); // /home/user/project/app.js
module.loaded
JavaScript
// 模块是否已完成加载
console.log(module.loaded); // false(加载中)
// 加载完成后变为 true
module.children
JavaScript
// 当前模块引入的所有子模块
const fs = require('fs');
const path = require('path');
console.log(module.children);
// [ Module { id: 'fs', ... }, Module { id: 'path', ... } ]
module.parent
JavaScript
// 首次引用该模块的模块(已弃用)
console.log(module.parent); // Module 对象或 null
module.exports 与 exports 的区别
JavaScript
// exports 是 module.exports 的引用
console.log(exports === module.exports); // true
// ✅ 正确:添加属性
exports.name = 'Tom';
exports.age = 25;
// ❌ 错误:重新赋值会断开引用
exports = { name: 'Tom' }; // module.exports 不受影响
// ✅ 正确:导出整个对象
module.exports = { name: 'Tom', age: 25 };
module.exports 才是真正的导出对象,exports 只是它的引用简写。
要点总结
- module 是每个模块的局部对象,包含模块元信息
- module.exports 是真正的导出对象
- exports 是 module.exports 的引用,只能添加属性
- module.id、module.filename、module.loaded 提供模块状态信息
📝 发现内容有误?点击此处直接编辑