好问题,阿杰 👍
我来帮你详细解释 module.exports
的作用,这是 Node.js 里最核心的概念之一。
📦 Node.js 中的 module.exports
1. 背景
在 Node.js 中,每一个 文件 就是一个 模块。
模块内部的变量、函数、类,默认是 私有的,外部不能直接访问。
如果你想要把某些东西提供给外部使用,就需要用 module.exports
或 exports
。
2. module.exports
的作用
👉 让一个模块(文件)对外暴露接口。
换句话说:决定了 require() 得到的是什么内容。
3. 基本用法
(1) 导出对象
// math.js
module.exports = {
add: (a, b) => a + b,
sub: (a, b) => a - b
}
// main.js
const math = require('./math')
console.log(math.add(2, 3)) // 5
(2) 导出单个函数
// sayHello.js
module.exports = function(name) {
return `Hello, ${name}!`
}
// main.js
const sayHello = require('./sayHello')
console.log(sayHello('阿杰')) // Hello, 阿杰!
(3) 导出类
// User.js
class User {
constructor(name) {
this.name = name
}
sayHi() {
console.log(`Hi, I am ${this.name}`)
}
}
module.exports = User
// main.js
const User = require('./User')
const u = new User('阿杰')
u.sayHi() // Hi, I am 阿杰
4. exports
和 module.exports
的区别
在 Node.js 里,其实每个模块底层都像这样:
let exports = {}
let module = { exports: exports }
exports
只是module.exports
的一个 引用。- 如果你直接给
exports
赋值,会断开和module.exports
的联系。
✅ 正确写法
exports.add = (a, b) => a + b
等价于:
module.exports.add = (a, b) => a + b
❌ 错误写法
exports = function() { } // ❌ 这样不会导出
因为这样 exports
变成了新的对象,不再指向 module.exports
。
5. 总结口诀
module.exports
才是真正导出的东西exports.xxx = ...
只是给module.exports
添加属性- 如果要导出一个整体(函数、类、对象),用
module.exports
- 如果要导出多个方法,用
exports.xxx = ...
发表回复