require 函数细节

require 函数功能:导入文件(模块)中导出的对象。

require 查找规则

导入对象语法如下:

require(X);

常用查找规则:

  • 情况一:X 为一个核心模块,比如 path、http
    • 则 require 直接返回核心模块,并且停止查找
  • 情况二:X 是以 ./ 或 …/ 或 /(根目录)起始,按照以下顺序查找文件(直至找到对应文件)。
    • step01:将 X 当作文件在对应目录下查找
      • 拥有后缀名,按照 X.后缀名 格式查找对应的文件
      • 没有后缀名
        • 直接查找文件 X
        • 查找 X.js 文件
        • 查找 X.json 文件
        • 查找 X.node 文件
    • step02:为找到对应的文件,将 X 作为一个目录,查找该目录下名为 index 的文件
      • 查找 X/index.js 文件
      • 查找 X/index.json 文件
      • 查找 X/index.node 文件
    • step03:仍然没有找到,报错:not found
    • 情况三:只有 X(没有路径),并且 X 并不是一个核心模块,查找顺序如图:
      查找规则
      • 仍然没有找到,报错:not found

require 注意事项

  • require() 为同步函数,即查找到文件的代码会在本文件的代码之前执行
  • 模块在被第一次引入时,模块的 js 代码会被运行一次
  • node缓存机制,如果该文件已经被引入过一次,那么该文件会进入缓存,待再被引入时会直接从缓存中获取该文件,此时该文件代码并不会自动执行
  • 该模块是否被引入过由 Module.loaded (Boolean 类型)记录,未被加载过 Module.loaded: false。已被加载过 Module.loaded: true。
  • 循环引入模块时,Node采用深度优先算法
    • 图示加载顺序为:main -》aaa -》ccc -》ddd -》eee -》bbb
      Node查找文件-深度优先
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值