分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

理解nodejs的module

发布时间:2023-09-06 02:27责任编辑:傅花花关键词:jsnodejs

module

在 Node.js 模块系统中,每个文件都视为独立的模块,node在运行某个模块儿时会生成一个module对象

Module { ?id: ‘.‘, ?exports: 2, ?parent: null, ?filename: ‘/Users/leinov/github/node-api/module/module.js‘, ?loaded: false, ?children: ??[ Module { ??????id: ‘/Users/leinov/github/node-api/module/circle.js‘, ??????exports: [Object], ??????parent: [Circular], ??????filename: ‘/Users/leinov/github/node-api/module/circle.js‘, ??????loaded: true, ??????children: [], ??????paths: [Array] } ], ?paths: ??[ ‘/Users/leinov/github/node-api/module/node_modules‘, ????‘/Users/leinov/github/node-api/node_modules‘, ????‘/Users/leinov/github/node_modules‘, ????‘/Users/leinov/node_modules‘, ????‘/Users/node_modules‘, ????‘/node_modules‘ ] }
  • id为当前文件
  • exports为当前node文件模块儿导出的值
  • parent为父级调用,如果为null则该文件没有被调用
  • filename为当前文件名
  • loaded是否被加载
  • children 引入模块数组,数组项格式同module
  • paths为node模块儿 node_modules 模块儿查找路径,一直查到根目录

module.exports & exports

Node里面的模块系统遵循是CommonJs规范,CommonJs定义的模块分为: 模块标识(module)、模块定义(exports) 、模块引用(require),在模块儿运行的时候都会生成一个module对象和一个exports对象,module对象下也有一个exports对象,默认情况下这两个对象都是空对象。如果有引用其他模块儿或定义模块儿 即module.exports或者exports被赋值时,则该模块儿就是一个有效的带有返回值的模块儿。

一个模块儿真正导出的是module.exports的值,exports只是module.exports的一个引用
可以简单理解为下面这种对象引用和赋值的区别

let obj1 = {a=1};let obj2 = obj1;console.log(obj1,obj2); // {a:1} {a:1}obj2.a = 2 console.log(obj1,obj2); // {a:2} {a:2}obj2 = {b:3} console.log(obj1,obj2); // {a:2} {b:3}

obj2只是obj1的一个引用。当 obj2.a 改变时其实改变的是 obj1obj2 都指向的同一个堆里的数据。但 obj2 ={b:3} 则重新在堆里开辟了另一个内存块儿来存储。已经跟 obj1 脱离没有关系了

所以经常会看到node模块儿里会像下面这样来导出模块儿。

exports = module.exports = ()=>{ ???do something}

这是为了让exports引用指向module.exports同一块内存,确保数据的一致性。

总结

  • 在执行 node 文件时同事创建了 module.exportsexports 对象
  • exports 是指向 module.exports 的一个引用
  • require("xxx") 其实引用的是xxx中的 module.exports 而非 exports

github nodejs

来源:https://segmentfault.com/a/1190000017345276

理解nodejs的module

原文地址:https://www.cnblogs.com/lovellll/p/10162129.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved