Node.js exports 导出对象
exports 是 Node.js 模块系统提供的导出简写,用于暴露模块的公共接口。
基本用法
JavaScript
// 导出单个属性
exports.name = 'utils';
exports.version = '1.0.0';
exports.add = function(a, b) {
return a + b;
};
exports.subtract = (a, b) => a - b;
exports 与 module.exports 的关系
JavaScript
// exports 是 module.exports 的引用
console.log(exports === module.exports); // true
// 初始状态
// module.exports = {}
// exports = module.exports
正确用法
JavaScript
// ✅ 正确:添加属性
exports.fn1 = () => console.log('fn1');
exports.fn2 = () => console.log('fn2');
// 等同于
module.exports.fn1 = () => console.log('fn1');
module.exports.fn2 = () => console.log('fn2');
错误用法
JavaScript
// ❌ 错误:重新赋值会断开引用
exports = {
name: 'utils',
fn: () => console.log('fn')
};
// 这样不会生效,因为 exports 不再指向 module.exports
// ❌ 错误:exports 指向新对象
exports = function() {
console.log('utils');
};
// 同样不会生效
导出对象的最佳实践
JavaScript
// 需要导出整个对象或函数时,使用 module.exports
// 导出构造函数
module.exports = class User {
constructor(name) {
this.name = name;
}
};
// 导出单个函数
module.exports = function add(a, b) {
return a + b;
};
// 导出完整对象
module.exports = {
name: 'utils',
add: (a, b) => a + b,
subtract: (a, b) => a - b
};
混合使用
JavaScript
// 可以混合使用
module.exports = {
name: 'utils'
};
// ❌ 错误:此时 exports 已断开引用
exports.version = '1.0.0'; // 不会生效
对比总结
| 方式 | 用途 | 示例 |
|---|---|---|
| exports.xxx | 添加单个属性 | exports.add = fn |
| module.exports | 导出整个对象 | module.exports = { ... } |
记住:exports 只是 module.exports 的引用简写,导出整体时必须用 module.exports。
要点总结
- exports 是 module.exports 的引用
- 只能用 exports 添加属性,不能重新赋值
- 导出函数或类时使用 module.exports
- 同一模块中避免混用两种方式
📝 发现内容有误?点击此处直接编辑