总结区别:
假设我们有一个logger.js文件,其中定义了一个log函数,我们想要将它暴露给其他模块使用。我们可以使用exports对象来实现:
// logger.js
exports.log = function(message) {
console.log(message);
};
在上面的代码中,我们使用exports对象暴露了log函数。现在,我们在另一个文件中引入logger.js模块并测试:
// app.js
const logger = require('./logger');
logger.log('Hello World!'); // 输出 Hello World!
在上面的代码中,我们首先引入了logger.js模块,然后调用了log函数。由于log函数是通过exports暴露的,因此我们可以使用logger.log来调用它。
但是,如果我们将module.exports直接赋值为一个函数或对象,就会导致exports失效。例如:
// logger.js
module.exports = function(message) {
console.log(message);
};
exports.log = function(message) {
console.log(`[log]: ${message}`);
};
在上面的代码中,我们将module.exports直接赋值为一个函数,然后又使用exports对象来暴露了log函数。现在,我们在另一个文件中引入logger.js模块并测试:
// app.js
const logger = require('./logger');
logger.log('Hello World!'); // 报错:logger.log is not a function
在上面的代码中,我们尝试调用log函数,但是却报错了。这是因为我们将module.exports直接赋值为一个函数后,exports对象失去了对原module.exports对象的引用,因此exports.log也失效了,导致log函数无法被调用。
因此,当我们使用exports时,应该避免直接覆盖module.exports,以免导致exports失效。
文章介绍了在Node.js中如何使用exports和module.exports导出模块功能。通过示例说明,当直接赋值给module.exports时,exports的导出将失效,导致无法调用相关函数。建议避免覆盖module.exports以保持exports的正常使用。
3333

被折叠的 条评论
为什么被折叠?



