Node模块化原理与exports、module.exports的区别

Node模块化原理

  1. 在 Node 中,每个模块内部都有一个自己的 module 对象
  2. 该 module 对象中,有一个成员exports,exports 也是一个对象
  3. 也就是说如果你需要对外导出成员,只需要把导出的成员挂载到 module.exports 中
  4. 每次导出接口成员的都需要通过 module.exports.xxx = xxx 的方式,有点麻烦。所以,Node 为了简化操作,专门提供了一个变量exports( expors = module.exports
  5. var 变量名 = require('引入的模块') 等同于 var 变量名 = 引入的模块中的module.exports
  6. 可以理解为在Node.js中每个js文件都存在以下代码
var module = {
  exports: {}
}

//将module.exports的引用赋值给exports
var exports = module.exports

//将需要导出的成员进行挂载
// module.exports.add = function (x, y) {
//   return x + y
// }
// exports.reduce = function (x, y) {
//   return x - y
// }

return module.exports

exports与module.exports

exports只是module.exports的一个引用

  • exports只能通过点的方式赋值,直接赋值不会影响module.exports
//改变了exports的引用,最后return是module.exports的引用,所以并不会影响导出的对象
exports = function (x, y) {
   return x + y
}
  • module.exports可以直接赋值,但是需要注意后者会覆盖前者
module.exports = 'hello';
//后者会覆盖前者
module.exports = function add(x,y) {
    return x+y;
}

实际应用:
导出单个成员:module.exports = xxx
导出多个成员: exports.xxx = xxx 或 modeule.exports = {};

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容