理解nodejs的module
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 改变时其实改变的是 obj1 和 obj2 都指向的同一个堆里的数据。但 obj2 ={b:3} 则重新在堆里开辟了另一个内存块儿来存储。已经跟 obj1 脱离没有关系了
所以经常会看到node模块儿里会像下面这样来导出模块儿。
exports = module.exports = ()=>{
do something
}
这是为了让exports引用指向module.exports同一块内存,确保数据的一致性。
总结
- 在执行
node文件时同事创建了module.exports和exports对象 exports是指向module.exports的一个引用require("xxx")其实引用的是xxx中的module.exports而非exports
github nodejs
来源:https://segmentfault.com/a/1190000017345276
理解nodejs的module的更多相关文章
- 理解nodejs的module模块儿
module 在 Node.js 模块系统中,每个文件都视为独立的模块,node在运行某个模块儿时会生成一个module对象 Module { id: '.', exports: 2, parent: ...
- NodeJS旅程 : module 不可忽略的重点
modules 模块的简介 Module 是Node.js中最重要的一个部分也是进行深度开发前的必修课.掌握Module才能真正理解NodeJS的精髓,你会发现从思路上会有极大的扩展. 学会写mod ...
- 从原理上理解NodeJS的适用场景
NodeJS是近年来比较火的服务端JS平台,这一方面得益于其在后端处理高并发的卓越性能,另一方面在nodeJS平台上的npm.grunt.express等强大的代码与项目管理应用崛起,几乎重新定义了前 ...
- [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()
译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...
- NodeJs 的Module.export 和 export
NodeJs 的Module.export 和 export 是一样的. 但是Module.export ={....} 可以起效,.export ={....} 是失效的. 这里的export ...
- ES6的export与Nodejs的module.exports
原文:https://www.cnblogs.com/lxg0/p/7774094.html module.exports与exports,export与export default之间的关系和区别 ...
- nodejs 中module.exports 和 exports 区别详细介绍
你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块接下来介绍创建过程,感兴趣的朋友可以参考下 你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例 ...
- 77.深入理解nodejs中Express的中间件
转自:https://blog.csdn.net/huang100qi/article/details/80220012 Express是一个基于Node.js平台的web应用开发框架,在Node.j ...
- 理解nodejs中的stream(流)
阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...
随机推荐
- href 页面跳转页面 参数
$.getUrlParam = function (name) { var reg = new RegExp("(^|&)" + name + "=([^& ...
- SVN 环境搭建
安装配置 安装环境 #查看系统版本环境 [root@svn ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@svn ~]# u ...
- DBMS的四大特性
- leyou_05_文件上传
1.搭建一个新的微服务Ly-upload用来上传文件 2.导入文件上传到额依赖 <dependencies> <dependency> <groupId>org.s ...
- 史上最直接小白式的Sourcetree的分支创建与合并
一.Sourcetree简单介绍通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的. Sourcetree则可以与Git结合,提供图形界面,使 ...
- Touching segments(数据结构)
题目链接 Problem Statement Your Maths professor is a very nice guy, but he sometimes comes up with not s ...
- Python基础-列表、元组、字典、字符串(精简解析),全网最齐全。
一.列表 =====================================================1.列表的定义及格式: 列表是个有序的,可修改的,元素用逗号隔开,用中括号包围的序列 ...
- day66test
作业 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom', math: ...
- IDEA中配置国内maven库镜像(阿里云)
配置maven中settings.xml,在mirrors段内增加镜像配置,配置后如下: <mirror> <id>nexus-aliyun</id> <mi ...
- Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 class Solution { publ ...