node 的路径分析和文件查找策略

注意本篇文章的内容可以在《深入浅出 nodejs》这一本书中的 2.2 章节中找到详细介绍,这里只说结论

首先必须明确几点

  1. node 中使用的 commonjs 规范
  2. commonjs 规范使用 require 导入模块
    1. 模块就是文件,每一个文件都是一个模块

所以 node 中路径分析主要是针对 require 方法的,当然还有其他的比如说配置文件(package.json)中

查找顺序如下

  1. 优先从缓存加载
  2. 模块标识符分析
    1. 判断是否是原生(核心)模块(fs,http 等)
    2. 判断是否是路径形式的文件模块
      1. 如果是绝对路径,就从根目录找
      2. 如果是相对路径就从当前 require 文件相对位置查找
    3. 判断是否是自定义模块(也就是各种 npm 包)
      1. 在模块路径中依次查找
      2. 模块路径是各个层级 node_modules 组成的数组
  3. 文件扩展名分析
    1. 如果文件没有后缀,node 会按照 js,json,node 的次序补充扩展名,依次尝试
  4. 目录分析
    1. 目录作为模块,默认根据目录下 package.json 文件的 main 来指定目录模块
    2. 如果目录下没有 package.json 或着没有 main 属性,就会依此试图加载 .js、json、node 文件【文件扩展名分析】
相关推荐
天蓝色的鱼鱼31 分钟前
从“死了么”到“我在”:用uniCloud开发一款温暖人心的App
前端·uni-app
小徐_233334 分钟前
uni-app 组件库 Wot UI 的 AI 友好型编程指南
前端·uni-app
HelloReader37 分钟前
Flutter Widget 基础手把手教你创建自定义组件(二)
前端
Hilaku41 分钟前
在 HTTP/3 普及的 2026 年,那些基于 Webpack 的性能优化经验,有一半该扔了
前端·javascript·面试
前端付豪44 分钟前
AI 数学辅导老师项目构想和初始化
前端·后端·python
HelloReader44 分钟前
从零创建你的第一个 Flutter 应用(一)
前端
程序员阿峰1 小时前
别再写JS监听滚动了!一行CSS搞定导航固定+通讯录效果(附3个案例)
前端
wordbaby1 小时前
前端进阶:小程序 Canvas 2D 终极指北 — 给图片优雅添加水印
前端·canvas
树上有只程序猿1 小时前
OpenClaw虽香,但不是人人都养得起“小龙虾
前端·openai
SuperEugene1 小时前
Vue3 + Element Plus 全局 Message、Notification 封装与规范|Vue生态精选
前端·javascript·vue.js