当前位置: 首页 > news >正文

Node.js(三)-模块的加载机制

1. 优先从缓存中加载

        模块在第一次加载后会被缓存,这就意味着多次调用require()不会导致模块的代码被执行多次。

注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率.

2. 内置模块的加载机制 

        内置模块是由Node.js官方提供的模块,内置模块的加载优先级最高。 

        例如:require(fs)始终返回内置的 fs 模块,即使在 node_modules 目录下有名字相同的包也叫做 fs。 

3. 自定义模块的加载机制

        使用require()加载自定义模块时,路径必须以 ./ 或者 ../ 开头,如果没有指定./或者../这样的路径标识,Node会把它当做内置模块或者第三方模块进行加载。

         在使用 require()导入自定义模块时,如果省略了文件的扩展名,则 Node.js 会按顺序分别尝试加载以下的文件:

  • ①按照确切的文件名进行加载;
  • ②补全.js 扩展名进行加载;
  • ③补全.json 扩展名进行加载;
  • ④补全.node 扩展名进行加载;
  • ⑤加载失败,终端报错。

 4. 第三方模块的加载机制

  • 导入第三方模块后,Node.js 会从当前模块的父目录开始,尝试从/node_modules 文件夹中加载第三方模块。
  • 如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。

例如,假设在C:\Users\xiao\project\foo.js文件里调用了require('tools'),则 Node.js 会按以下顺序查找:

C:\Users\xiao\project\node_modules\tools

② C:\Users\xiao\node_modules\tools

 C:\Users\node_modules\tools

 C:\node_modules\tools

 5. 目录作为模块

         当把目录作为模块标识符,传递给 requir()进行加载的时候,有三种加载方式:

  • ①在被加载的目录下查找一个叫做 package.json 的文件,并寻找 main 属性,作为 require()加载的入口;
  • ②如果目录里没有 package.json 文件,或者 main 入口不存在或无法解析,则 Node.js 将会试图加载目录下的 index.js 文件;
  • ③如果以上两步都失败了,则Node.js 会在终端打印错误消息,报告模块的缺失: Error: Cannot find module'xxx'。

http://www.lryc.cn/news/268227.html

相关文章:

  • 函数
  • 第四周:机器学习知识点回顾
  • 韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理
  • python编程(2)之灯光秀的按钮
  • pandas将dataframe列中的list转换为多列
  • 小巧的Windows Memory Cleaner内存清理工具-释放内存,提升电脑的性能-供大家学习研究参考
  • STM32F072 CAN and USB
  • 卷积神经网络基础与补充
  • File Inclusion(Pikachu)
  • 【Redis刨析】知识图谱的构建与实现
  • html学习笔记 标题、段落、换行、列表、超链接、图片、表格
  • 汽车项目管理
  • Tg-5511cb: tcxo高稳定性+105℃高温
  • Linux 命令 ifconfig 全面解析!
  • 00-Git 应用
  • 安全运维是做什么的,主要工作内容是什么
  • nodejs+vue+ElementUi大学新生入学系统的设计与实现1hme0
  • Unity-序列化和反序列化
  • 如何将语音版大模型AI接入自己的项目里(语音ChatGPT)
  • 鸿蒙列表,item组件封装传参问题?@ObjectLink 和@Observerd
  • 信号与线性系统翻转课堂笔记12——时域取样定理
  • 爬虫工作量由小到大的思维转变---<Scrapy异常的存放小探讨>
  • 7.串口通信uart编写思路及自定义协议
  • 【物联网】光影之谜:RGB-LED传感器引领科技变革之路
  • promise的使用和实例方法
  • Visual Studio2022配置ReSharper C++ 常用设置
  • 论文解读类的公众号/知乎专栏,交给agent去做吧...
  • 【学习笔记】Java函数式编程03 Stream流-终结操作
  • 2024 Android保活总结
  • 迅为RK3568开发板Ubuntu上使用串口调试