📜  Node.js 中 module.exports 和 export 的区别(1)

📅  最后修改于: 2023-12-03 15:17:56.609000             🧑  作者: Mango

Node.js 中 module.exports 和 export 的区别

在 Node.js 中,有两种方式可以将代码从一个模块导出到另一个模块中使用,分别是 module.exportsexports。虽然它们的作用相同,但它们在使用时存在一些区别。

module.exports

module.exports 是 Node.js 中用于导出模块的对象,可以将模块中的任何内容(变量、函数、类等)赋值给 module.exports,并在其他模块中使用。

例如,在一个名为 moduleA.js 的模块中,我们定义了一个函数:

function myFunction() {
  console.log('Hello, world!');
}

我们可以使用 module.exports 将函数导出到其他模块:

module.exports = myFunction;

然后,在另一个名为 moduleB.js 的模块中,我们可以使用 require 方法来导入 moduleA.js 中导出的函数:

const myFunction = require('./moduleA');

myFunction(); // 输出:Hello, world!
exports

exports 也是 Node.js 中用于导出模块的对象,与 module.exports 的作用相同,但在使用时需要注意一些细节。

首先,我们需要注意到,exports 实际上是对 module.exports 的一个引用,它们引用了同一个对象。所以,我们可以像这样使用 exports 导出模块中的内容:

exports.myVar = 'Hello, world!';

exports.myFunction = function() {
  console.log(exports.myVar);
};

在另一个模块中,我们可以像这样导入 exports

const moduleC = require('./moduleC');

console.log(moduleC.myVar); // 输出:Hello, world!

moduleC.myFunction(); // 输出:Hello, world!

然而,需要注意到的是,当我们直接为 exports 赋值时,与 module.exports 不同,它不会将模块中的默认导出对象自动替换为新对象。例如,以下代码不会生效:

exports = {
  myVar: 'Hello, world!',
  myFunction: function() {
    console.log(exports.myVar);
  }
};

如果我们使用上面的代码导出模块,则在其他模块中使用 require 导入该模块时,只会得到空对象。因此,如果我们要将默认导出对象替换为新对象,则应该使用 module.exports

总结
  • module.exports 用于指定该模块的默认导出对象,可以为任何类型的值,包括函数、对象、类等。
  • exports 实际上是对 module.exports 的一个引用,可以通过为该对象的属性赋值来导出模块中的内容。
  • 在使用 exports 导出模块时,应该注意不要直接为 exports 赋值,因为这不会替换默认导出对象,而是会导致导出的内容为空。
  • 如果需要将默认导出对象替换为新对象,则应该使用 module.exports