node【引入模块查找机制】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

我们在开发过程中,经常使用require或import去引入模块,而在使用过程中,会发现有很多简写方式,如引入index/index.js我们直接require('/index')即可,为什么会这样,是因为node中有一套自己的查找规则


一、模块分类

node中加载的模块总共可以分为三个类
  • 核心模块fs、http这些内置模块,在编译时已经注入到内存中
  • 本地模块自己本地开发的模块
  • npm下载的模块

值得一提的是,模块在第一次引入后就会缓存在内存中,再次引入时,会直接读取在内存中的模块缓存。所以即使多此require同一个文件也不会多次执行

二、查找机制

我们引入模块时,基本上都是两种使用方式,

  • 模块名 requir(‘fs’)
  • 路径 require(‘/index’)
  • 在使用模块名时
    require('lib')

    • 首先会在使用require(‘模块名’)文件的同级目录寻找node_modules文件夹
    • 如果没有node_modules文件夹则向上级目录寻找,没有找到则继续向上级寻找,直到系统的根目录为止。此时,没有找到则报错
    • 如果有node_modules文件夹,在里面寻找与模块名相同的目录或文件,如果查找到文件则引入文件,如果是目录则优先寻找同级中package.json文件,如果存在则寻找package.json文件中的main配置,如果没有。则寻找index.(js|json),如果再没有则向上级目录中的node_modules文件夹中继续寻找。
  • 使用地址时
    require('./lib')

    • 先寻找 ./lib/package.json中的main配置
    • 没有则寻找./lib.js
    • 没有则寻找./lib.json
    • 没有则寻找 ./lib/index.js
    • 没有则寻找./lib.json
    • 没有则报错

后缀补全


在省略文件后缀时,会按照以下优先级去自动补全文件后缀
  • 补全.js拓展名加载
  • 补全.json拓展名加载
  • 补全.node拓展名加载
  • 加载失败,终端报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯一样的MEI男子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值