📅  最后修改于: 2023-12-03 15:17:56.609000             🧑  作者: Mango
在 Node.js 中,有两种方式可以将代码从一个模块导出到另一个模块中使用,分别是 module.exports
和 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
也是 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
。