📅  最后修改于: 2023-12-03 15:03:16.144000             🧑  作者: Mango
在NodeJS中,模块化是一种常见的编程模式,通过模块化,我们可以将代码分拆成多个文件,每个文件都是一个模块,每个模块是独立的、可重用的。
在模块化中,module.exports和exports都是用于将模块中的变量、函数或类暴露给其他模块使用的方式,但是它们有一些区别。
module.exports是NodeJS中的一个特殊对象,用于导出模块中的变量、函数或类。如果我们导出的是一个变量或函数,则可以直接将其赋值给module.exports,如下所示:
// math.js
function add(a, b) {
return a + b;
}
module.exports = add;
在另一个模块中,我们可以通过require函数获取到math.js中导出的add函数,并使用它:
// main.js
const add = require('./math.js');
console.log(add(1, 2)); // 输出 3
我们也可以使用module.exports导出一个对象,如下所示:
// math.js
module.exports = {
add: function(a, b) {
return a + b;
},
substract: function(a, b) {
return a - b;
}
};
在另一个模块中,我们可以通过require函数获取到math.js中导出的对象,如下所示:
// main.js
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出 3
console.log(math.subtract(3, 2)); // 输出 1
exports是module.exports的一个别名,它是一个空对象,它指向module.exports。它是为了让我们在编写模块的时候更加方便,可以直接向exports对象上添加属性和方法。
例如,我们可以使用exports对象导出一个变量或函数,如下所示:
// math.js
exports.add = function(a, b) {
return a + b;
};
在另一个模块中,我们可以通过require函数获取到math.js中导出的对象,并使用它:
// main.js
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出 3
需要注意的是,如果我们直接将exports对象赋值为一个函数或类,则module.exports会失效,如下所示:
// math.js
exports = function(a, b) {
return a + b;
};
在另一个模块中,再次使用require函数获取到math.js中导出的对象时,我们得到的是一个空对象,而不是预期中的函数:
// main.js
const math = require('./math.js');
console.log(math); // 输出 {}
因此,建议我们在编写模块时,使用module.exports代替exports来导出模块中的变量、函数或类。
module.exports和exports都可以用于导出模块中的变量、函数或类,但是它们有一些区别。module.exports是一个特殊对象,它是真正导出模块中变量、函数或类的对象,而exports是module.exports的一个别名,它是一个空对象,通过向它添加属性和方法来导出模块中的变量、函数或类。因此,建议我们在编写模块时,使用module.exports代替exports来导出模块中的变量、函数或类。