require函数加载模块的过程
一、传入相对或者绝对路径
加载模块时往require模块中传入的是 ‘./’ 或者 '../' 或者 '/' 等等这样的路径开头
1、路径名后面有后缀名
require('./test')
直接根据路径去查找对应的文件,找不到就加载失败
2、路径名后没有后缀名
require('./test')
查找规则:
第一步:根据给定的路径,依次添加文件后缀,.js,找到使用,找不到,换成.json,找不到换成.node,依次进行匹配;如果都找不到,进行第二步;
第二步:如果第一步执行完还没找到,就在给定的路径下查找是否有test目录(尝试找test包):
(1)找不到则加载失败,
(2)找到了,依次在test目录下查找,package.json文件(找到这个文件,尝试读取main字段中的入口文件,根据main字段匹配的文件去读取),如果入口文件中main字段匹配的文件找不到,则按照 index.js、index.json、index.node依次去找,找不到加载失败
二、传入的不是路径
1、那就是模块名称
比如:require(‘http')
1、如果是核心模块,直接加载核心模块;
2、不是核心模块,现在当前路径下查找node_modules目录中是否有对应的包,(1)如果有:使用;
(2)没有则再去上一层目录查找,依次查找到磁盘根路径,如果最后都没找到,则加载失败;