美文网首页
6.Node.js的模块查找机制

6.Node.js的模块查找机制

作者: 璎珞纨澜 | 来源:发表于2019-03-28 17:30 被阅读0次

    优先从缓存加载

    由于 在 a 中已经加载过 b 了,所以这里不会重复加载
    可以直接从缓存中拿到其中的接口对象,但是不会重复执行里面的代码
    这样做的目的是为了避免重复加载,提高模块加载效率


    优先从缓存加载

    核心模块加载

    核心模块的本质也是文件,只不过核心模块文件以及被编译到二进制文件中,我们只需要按照名字来加载就可以了

    路径形式的文件模块加载

    模块标识符是路径形式的模块:

    • ./ 当前目录,不可省略
    • ../ 上一级目录,不可省略
    • /xxx 磁盘根目录,d:/a/foo.js 指定目录,这两个几乎不用,引用的模块通常跟着项目目录。
    • .js 后缀可以省略

    第三方模块加载

    • 我们知道凡是第三方模块都必须通过 npm 来下载,使用的时候可以通过 require('包名') 的方式来进行加载才可以使用。
      • 不可能有任何一个第三方包和核心模块的名字是一样的。
      • 既不是核心模块,也不是路径形式的第三方包模块是如何加载的?(假设第三方包名为 xxx)
        1. 先找到当前文件所处目录中的 node_modules 目录:node_modules/xxx
        2. 找到该目录下的package.json文件,即为node_modules/xxx/package.json
        3. node_modules/xxx/package.json 文件中的 main 属性,main 属性中就记录了第三方包的入口模块。
        4. 如果 main 属性没有指定入口模块或者没有 package.json 文件,那么就找是否存在默认备选项 index.js 作为入口模块。
          5.如果以上任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找。规则同上1,2,3,4。如果上一级还没有,则继续往上上一级查找,直到当前磁盘根目录。如果还找不到,最后报错:
          can't not find module xxx
          *一般来说一个目录有且仅有一个 node_modules 存放到项目的根目录。
        5. 加载即入口模块,从而加载使用这个第三方包

    深入学习请了解https://infoq.cn/article/nodejs-module-mechanism

    相关文章

      网友评论

          本文标题:6.Node.js的模块查找机制

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