nodejs中 exports和module exports有什么区别

发布时间 2023-03-22 21:13:49作者: 盘思动

在 Node.js 中,每个模块都是一个单独的文件,并且每个模块都有自己的作用域。
为了使模块中定义的函数、变量、对象或类能够在其他模块中使用,
Node.js 提供了两个对象:exports 和 module.exports。虽然它们在某些情况下可以互换使用,
但它们实际上有不同的用途和行为。

exports 对象是对 module.exports 对象的引用。
当你使用 exports.foo 导出某个变量或函数时,实际上是向 module.exports 对象添加了一个属性 foo,
并将其值设置为你导出的内容。但是,如果你尝试直接赋值给 exports,
例如 exports = { foo: 'bar' },则会破坏它与 module.exports 的引用关系,导致模块无法导出任何东西。

因此,通常建议使用 module.exports,因为它始终指向真正的导出对象。
你可以使用 module.exports 导出任何类型的值,例如对象、函数、类或字符串。如果你想一次导出多个函数或变量,
可以将它们添加到一个对象中,然后将该对象赋值给 module.exports。例如:

module.exports = {
  greet: function(name) {
    console.log(`Hello, ${name}!`);
  },
  goodbye: function(name) {
    console.log(`Goodbye, ${name}!`);
  }
};

然后,在其他模块中可以使用 require 方法来加载并使用该模块中的函数:

const myModule = require('./myModule');
myModule.greet('Alice'); // Hello, Alice!
myModule.goodbye('Bob'); // Goodbye, Bob!