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 文件【文件扩展名分析】
相关推荐
Cobyte6 小时前
22.Vue Vapor 组件 props 的实现
前端·javascript·vue.js
lichenyang4536 小时前
从 has.showToast 看 ASCF 的 API 调用链路
前端
张就是我1065928 小时前
DOMPurify 的一个漏洞:你以为 {} 是空的?
前端
疯狂的魔鬼8 小时前
一套 Schema 驱动四视图:记 useCrudSchemas 的设计与实践
前端·javascript·typescript
风骏时光牛马8 小时前
大模型开发工具高频故障与实操问题汇总代码案例大全
前端
没落英雄8 小时前
2. 让 Agent 能读写文件、执行命令 —— LocalShellBackend 实战
前端·人工智能·架构
白雾茫茫丶8 小时前
探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统
前端·vue.js·nuxt.js
奇奇怪怪的9 小时前
检索增强——混合检索、Re-rank 与 Query 优化
前端
user62229864925819 小时前
React 常用技术知识全景:从组件到 Hooks 的系统理解
前端
麻辣凉茶9 小时前
给阿嬤一封来自云端的信(上)
前端·node.js