注意本篇文章的内容可以在《深入浅出 nodejs》这一本书中的 2.2 章节中找到详细介绍,这里只说结论
首先必须明确几点
- node 中使用的 commonjs 规范
- commonjs 规范使用 require 导入模块
- 模块就是文件,每一个文件都是一个模块
所以 node 中路径分析主要是针对 require 方法的,当然还有其他的比如说配置文件(package.json)中
查找顺序如下
- 优先从缓存加载
- 模块标识符分析
- 判断是否是原生(核心)模块(fs,http 等)
- 判断是否是路径形式的文件模块
- 如果是绝对路径,就从根目录找
- 如果是相对路径就从当前 require 文件相对位置查找
- 判断是否是自定义模块(也就是各种 npm 包)
- 在模块路径中依次查找
- 模块路径是各个层级 node_modules 组成的数组
- 文件扩展名分析
- 如果文件没有后缀,node 会按照 js,json,node 的次序补充扩展名,依次尝试
- 目录分析
- 目录作为模块,默认根据目录下 package.json 文件的 main 来指定目录模块
- 如果目录下没有 package.json 或着没有 main 属性,就会依此试图加载 .js、json、node 文件【文件扩展名分析】