在Node.js中,我们可以使用exports对象来暴露模块的方法和属性,以便其他文件可以使用require函数引入并使用这些方法和属性。
// math.js
exports.add = function(a, b) {
return a + b;
};
exports.subtract = function(a, b) {
return a - b;
};
在另一个文件中,我们可以通过require函数引入上述math.js模块,并使用其中定义的方法:
// main.js
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出: 3
console.log(math.subtract(3, 2)); // 输出: 1
另外,我们也可以使用module.exports来代替exports,两者的主要区别在于module.exports初始值是一个空对象,而exports初始值是指向module.exports的引用。
// math.js
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = {
add,
subtract
};
在使用module.exports时,我们通常会将所有需要暴露的方法或属性直接赋值给它,而不是使用exports。这样做的好处是,我们不必担心exports是否指向正确的对象,因为module.exports始终指向我们想要暴露的对象。
在main.js中,我们同样可以通过require函数引入并使用这些方法:
// main.js
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出: 3
console.log(math.subtract(3, 2)); // 输出: 1
总结两种方式的区别,exports是module.exports的引用,因此通过exports添加的方法和属性也会被添加到module.exports中。通常推荐使用module.exports,因为它更直观,更易于理解。