MST

星途 面试题库

面试题:Node.js模块化代码结构之CommonJS规范

在Node.js中,使用CommonJS规范组织模块化代码。请阐述exports和module.exports的区别,并举例说明如何通过这两种方式导出一个包含多个函数的模块。
43.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

exports 和 module.exports 的区别

  1. 本质关系exportsmodule.exports 的一个引用。在 Node.js 的模块系统中,每个模块内部都有一个 module 对象,module.exports 才是真正对外暴露的接口,而 exports 是为了方便开发者而对 module.exports 的一个浅拷贝。
  2. 赋值差异:当对 exports 进行重新赋值(如 exports = {...})时,实际上是切断了与 module.exports 的联系,新赋值的 exports 不会影响到 module.exports,也就不会被外部模块正确引用。而直接对 module.exports 进行赋值(如 module.exports = {...})则可以正确地向外暴露模块接口。

示例

  1. 使用 exports 导出包含多个函数的模块
// mathUtils.js
exports.add = function(a, b) {
    return a + b;
};
exports.subtract = function(a, b) {
    return a - b;
};
  1. 使用 module.exports 导出包含多个函数的模块
// mathUtils.js
module.exports = {
    add: function(a, b) {
        return a + b;
    },
    subtract: function(a, b) {
        return a - b;
    }
};

在其他文件中引入上述模块的方式相同:

const mathUtils = require('./mathUtils');
console.log(mathUtils.add(5, 3)); 
console.log(mathUtils.subtract(5, 3));