美文网首页
nodejs模块路径解析和加载过程

nodejs模块路径解析和加载过程

作者: 风雅欢乐 | 来源:发表于2021-12-01 14:47 被阅读0次
  • Node.jS项目模块路径解析是通过require.resolve方法来实现的
  • require.resolve 就是通过 Module._resolveFileName 方法实现的
  • require.resolve 实现原理:
    1. Module._resolveFileName 方法核心流程有 3 点:
      a. 判断是否为内置模块
      b. 通过Module._resolveLookupPaths方法生成node_modules可能存在的路径
      c. 通过Module._findPath查询模块的真实路径
    2. Module._findPath核心流程有4点:
      a. 查询缓存(将request和paths通过\xoo合并成cacheKey)
      b. 遍历paths,将path与request组成文件路径basePath
      c. 如果basePath存在则调用fs.realPathSync获取文件真实路径
      d. 将文件真实路径缓存到Module._pathcache(key就是前面生成的cacheKey)
    3. fs.realPathSync核心流程有3点:
      a. 查询缓存(缓存的key为p,即Module._findPath中生成的文件路径)
      b. 从左往右遍历路径字符串,查询到/时,拆分路径,判断该路径是否为软链接,如果是软链接则查 询真实链接,并生其新路径p,然后继续往后遍历,这里有1个细节需要特别注意:
      c. 遍历过程中生成的子路径base会缓存在knownHard和cach&#A避免重复查询
  • require.resolve.paths等价于Module._resolveLookupPaths,该方法用于获取所有node_modules可能的路径
  • require.resolve.path实现原理:
    1. 如果路径为/(根目录),直接返回['/node_modules']
    2. 否则,将路径字符串从后往前遍历,查询到/时拆分路径,在后面加上node_modules,并加入到paths数组,直至查询不到/后返回paths数组

相关文章

  • nodejs模块路径解析和加载过程

    Node.jS项目模块路径解析是通过require.resolve方法来实现的 require.resolve 就...

  • nodejs 中有哪些常用的内置模块

    path模块nodejs中的path模块用于处理文件和目录的路径url模块在nodejs中url模块是用来解析ur...

  • node.js-path模块

    简介 模块描述: 用于处理文件路径及目录路径的一个nodejs内置模块常用功能:路径的解析(path.parse(...

  • nodejs模块加载机制

    nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找...

  • Nodejs的自定义模块加载中的坑

    加载自定义模块有两种方式: 按文件路径加载模块 通过查找node_modules目录加载模块 按文件路径加载 这种...

  • 22Module语法

    概述 CommonJS 是服务器模块加载规范,AMD 是浏览器模块加载规范 前者,nodejs中require和m...

  • 关于ngx lua require路径

    在nginx中可以直接设定模块的加载路径 在lua中也可以设定模块的加载路径--这是加载

  • nodejs url模块详解

    nodejs url模块 nodejs中用户url格式化和反格式化模块用于url解析、处理等操作的解决方案 1.u...

  • NodeJS学习笔记

    NodeJS就是一个独立运行js的解析器。 模块 将代码合理拆分至不同js文件中,每一个文件就是一个模块,文件路径...

  • nodejs模块加载

    使用nodejs也有很长一段的时间了,但却感觉自己并没有太多的积累。有时候会问自己,“你学了这么久了,比起初学者你...

网友评论

      本文标题:nodejs模块路径解析和加载过程

      本文链接:https://www.haomeiwen.com/subject/xvpsxrtx.html