node中require加载规则 和require加载原理

reuqire(‘’) 加载规则

管他对不对,看就完事了~~~~~~~

在这里插入图片描述

两种加载机制

一、 优先重缓存加载 (加载过的文件会缓存起来,不会重复加载)
  • 大家先看看下图:

在这里插入图片描述

  1. 由于a.js中加载了b.js了 所以 在main.js中不会再加载 a了,所以最后在控制台打印的是
我是a.js
我是b.js
我是main.js
  1. 但是main.js中require(‘b.js’) 会拿到b.js导出的接口对象不会重新执行b.js中的代码
  2. 目的: 避免重复加载,提高模块加载效率
二、require判断加载标识//也就是require(‘加载的模块标识’)
  1. 核心模块 标识
  2. 第三方模块 标识
  3. 自己写的模块 标识
  • 如果是非路径的模块标识(如果不是 / ./ …/) 直接报错 原因:
    • node 会把他当成核心模块或者 第三方模块加载,找不到就报错
    • 首位为 ** / ** 的话加载的是文件所处磁盘的根目录 (c:/、d:/)几乎不用
  • 核心模块
    • 直接使用加载就行,(默认被封装编译到了二进制文件中了)
  • 第三方模块
    • 第三方包一般通过npm 来下载,为什么第三方模块不会和核心模块加载冲突
    • 因为不可能第三方模块名会和核心模块名一样(规定)
加载第三方模块的原理:
  1. 当require(‘第三方报名’)后
  2. 先找到当前文件所在目录中的node_module文件夹(npm出来的第三方)
  3. 找到node_module文件夹中对应加载模块名的文件夹
  4. 在找到package.json 文件
  5. 找到package.json文件中的 main 这个属性(main属性记录了 第三方包的入口模块
  6. 然后使用这个第三方包,实际上最终加载的还是文件
如果文件package.json不存在或者main属性没有值,
  1. require会默认加载该包中的 index 文件(index 为默认被选项)
如果加载文件中的当前目录中没有node_module文件夹的话
  1. require就会查找上一级目录中是否有node_module文件夹
  2. 如果有,继续执行以上操作,如果没有在到上上一级查找,直到找到磁盘根目录好找不到就报错和作用域链差不多)(不会去他兄弟中查找
  • 基本就这些了····

啦啦啦啦啦~~~~~~~~~~~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RxnNing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值