在Node.js中,module.exports
和 exports
是两种导出模块的方式,它们的作用是使得模块中的内容可以被其他模块引用和使用。
-
module.exports:
-
module.exports
是一个指向当前模块所导出内容的对象的引用。你可以通过给module.exports
赋值来导出一个对象、函数、类或者任何其他的JavaScript类型。
-
// example.js
module.exports = {
foo: 'bar',
baz: function() {
console.log('baz');
}
};
-
exports:
-
exports
是module.exports
的一个引用,它是一个特殊的变量,指向了module.exports
。
-
// example.js
exports.foo = 'bar';
exports.baz = function() {
console.log('baz');
};
不要同时使用exports和module.exports
虽然 exports
和 module.exports
都可以用来导出内容,但是在同一个模块中不应该同时使用它们。因为在模块加载完成后,Node.js 会返回 module.exports
而不是 exports
。如果你同时使用了它们,但只有其中一个被赋值,那么最终导出的内容只会是 module.exports
所指向的对象,而 exports
上的属性将被忽略。
// example.js
// 此处使用 exports 导出变量
exports.baz = function() {
console.log('baz');
};
// 此处使用 module.exports 导出对象
module.exports = {
foo: 'bar'
};
当在同一个模块中同时使用 module.exports
和 exports
时,只有 module.exports
的赋值会生效,而 exports
上的属性将被忽略。这可能会导致一些意想不到的结果。下面是一个示例来说明这一点:
// example.js
// 此处使用 module.exports 导出对象
module.exports = {
foo: 'bar'
};
// 此处使用 exports 导出变量
exports.baz = function() {
console.log('baz');
};
在上面的例子中,module.exports
导出了一个对象 { foo: 'bar' }
,而 exports
导出了一个函数 baz
。但是,由于最终模块导出的是 module.exports
所指向的对象,而不是 exports
,所以 exports
上的属性不会被导出。
因此,在这个例子中,其他模块引入 example.js
后只能访问到 foo
,而不能访问到 baz
。
正确的做法是要么只使用 module.exports
,要么只使用 exports
。
不要直接给exports赋值
exports正确的用法是给他添加属性,如果直接赋值,将会导出空对象。
exports是module.export的一个引用。给exports添加属性就等于是给module.exports添加属性,直接给exports赋值,就改变了变量exports的指向,就是说exports不再是module.exports的引用。那么此时module.exports就是空对象。文章来源:https://www.toymoban.com/news/detail-851182.html
// example.js
exports=123
导入example.js模块的文件,得到的是一个空对象。这是因为只有 module.exports 指向的对象才会被导出,而不是 exports文章来源地址https://www.toymoban.com/news/detail-851182.html
到了这里,关于Node.js模块的导出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!