后缀json是什么文件_require的时候发生了什么?

本文探讨了Node.js中的CommonJS模块机制,详细分析了模块标识、加载步骤、模块路径查找过程,以及require的内部实现。重点讨论了模块路径数组的生成规则和require方法如何处理js、json、node文件。还涉及了module.exports与exports的区别,并鼓励读者深入阅读Node.js源码以了解更多细节。
摘要由CSDN通过智能技术生成

上一次写推文是两个多月前……,为了更好的把自己学到的东西进行总结,还是得写写推文了,开整了兄弟萌!

序言

commonjs是模块化机制的一种,在使用node的时候肯定避免不了使用它,但是在使用的时候有没有想过它内部做了什么操作呢?在《深入浅出nodejs》中就有讲到commonjs模块机制,看完之后觉得好像懂了很多,但又觉得不是很深刻。所以下载了一份node的源码,自己去看这部分的逻辑。

模块机制

模块标识:

模块标识就是传递给require()方法的参数,必须是小驼峰式的字符串,或者是.或者..开头的相对路径,或者绝对路径,可以没有文件后缀名。

模块加载步骤

在node中引入模块,需要经历以下3个步骤:
1.路径分析
2.文件定位
3.编译执行
在nodejs中模块分为核心模块和文件模块,核心模块在node源码编译的时候已经编译成了二进制文件并且加载到内存中,所以它的加载速度很快。文件模块则是用户自定义的模块,在运行时候才进行加载,而且加载过程会经历以上三个步骤。

模块路径

模块路径是node在文件定位的时候一种查找策略,具体表现为一个路径组成的数组。我们在node中把module.paths打印出来看看

c149a7ad5931b6a5d8a61d9e63af0de1.png

可以看到这个数组的生成规则是当前文件目录下的node_modules目录,然后是父目录下,然后一直往上查找,直到根目录下的node_modules目录。

查找过程分析

let { add } = require('./add');
let a = require('./test.js');
let fs = require('fs');
let connect = require('connect');

上述的四种模块的加载情况在开发都会遇到过,接下来就结合源码来分析这几种情况,不过在源码中会把一些细节去掉,只看主线部分
当我们调用require去加载一个模块的时候,调用了当前模块实例下的require方法。

Module.prototype.require = function(id) { //id为模块标识
  validateString(id, 'id');
  if (id === '') {
    throw new ERR_INVALID_ARG_VALUE(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值