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 文件【文件扩展名分析】
相关推荐
子兮曰1 小时前
Bun v1.4.1 深度解析:从 Zig 到 Rust,一场 11 天、64 个 AI 代理的语言迁徙
前端·后端·bun
人民广场吃泡面1 小时前
什么是AI Agent?它又能给前端带来哪些效率提升?
前端·人工智能
中科三方1 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
bug总结2 小时前
uniapp vue3全局方法注册使用
前端·javascript·uni-app
华无丽言2 小时前
如何在宜搭中实现获取子表中的字段值赋值到父表中?
前端·javascript·低代码
IT_陈寒3 小时前
Vue的computed属性竟然坑了我一把
前端·人工智能·后端
威斯软科的老司机3 小时前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
泯泷4 小时前
手搓JSVM第 12 篇:完整最小 JSVM 实现与源码设计复盘
前端·javascript·前端框架
默_笙4 小时前
🍔 给 AI 发一张结构化表格(下):从"自由发挥"到"按格填空"的输出驯服指南
前端·javascript
泯泷4 小时前
手搓JSVM第 11 篇:打包、模块与 CLI:把 VM 产物变成可运行文件
前端·javascript·前端框架