首先nodejs中加载模块的书写方式:
1. require("fs") 内核模块
2. require("./demo")或require("../demo")或require("/demo")相对地址模式
3. require("demo") 类似内核模块写法
require函数在执行的时候顺序为(忽略调缓存):
1. 首先查看是否是内核,是就直接返回
2. 解析要查找的目录
如果是相对地址模式,接卸的结果就是用户指定的地址的绝对地址形式(只有一个地址)
如果是类似内核模块的写法,那么解析出来的地址就是一个数组,假如我的环境:
win10, 登录用户名为jackletter,nodejs安装在d:\nodejs, 并配置了环境变量node_path=d:\node_path; ,执行的脚本为node c:\a\b\a.js
那么解析的结果为:
c:\a\b\node_modules
c:\a\node_modules
c:\node_modules
d:\node_path
c:\users\jackletter\.node_modules
c:\users\jackletter\.node_libraries
d:\nodejs\lib\node
3. 对解析到的目录依次查找
3.1 加上后缀.js|.json|.node去查找文件,找到就返回
3.2 找不到的就把这个路径当成文件夹
在这个文件夹里找package.json里的main:"ko.js"字段,找到了就返回这个指定的脚本
失败后直接在这个文件夹里查找index.js|index.json|index.node文件,找到了返回,找不到就下一条路径