【Node.js】模块的加载机制

news2024/11/24 4:00:47

 

✍️ 作者简介: 前端新手学习中。
💂 作者主页: 作者主页查看更多前端教学
🎓 专栏分享:css重难点教学       Node.js教学 从头开始学习

目录

模块的加载机制

        优先从缓存中加载

         内置模块的加载机制

        自定义模块的加载机制

         第三方模块的加载机制

        目录作为模块加载


模块的加载机制

        优先从缓存中加载

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

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

定义一个模块,里面写好打印内容

console.log('打印并显示内容');

 然后再另一个js文件中导入三次,看一看 会执行几次里面的内容。

require('./02模块');
require('./02模块');
require('./02模块');

可以看到,他只打印了一次,只执行了一次内容。

         内置模块的加载机制

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

意思是说  如果自定义模块,与内置模块同名,则优先会加载内置模块。

        自定义模块的加载机制

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

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

  1. 按照准确标记的扩展名
  2. 补全js扩展名进行加载
  3. 补全json扩展名进行加载
  4. 补全node扩展名进行加载
  5. 加载失败,终端报错 

         第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有以./或../开头,则Node.js会从当前父级模块开始查找子级node_modules文件夹,然后从里面查找导入的模块名称。

例如  在C:\Users\itheima\project\foo.js 文件里调用了require(‘tools’),则Node.js会按一下顺序查找。

  1.  C:\Users\itheima\project\node_modules\tools
  2. C:\Users\itheima\node_modules\tools
  3. C:\Users\node_modules\tools
  4. C:\node_modules\tools

        目录作为模块加载

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

  1. 在被加载的目录下查找一个叫做package.json的文件,并寻找main属性,作为require()加载的入口
  2. 如果没有package.json文件,或者main属性不存在,文件不存在的话,则会加载目录下的index.js文件
  3. 如果以上两部都失败了,则会报错 模块缺失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年浙江省中职组“网络空间安全”赛项模块B--Linux系统渗透提权

2022年中职组浙江省“网络空间安全”赛项 B-3:Linux系统渗透提权一、竞赛时间 420分钟 共计7小时 吃饭一小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第①阶段: 单兵模式系统渗透测试 任务一: Windows操作系统渗透测试 任务二: Linux操作系统渗透测试 任务…

经典算法|水仙花数|自幂数

算法题目 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位…

高精度RC振荡器的设计

1. 一些技术指标 应用于数字模拟混合信号芯片的高频率精度,高频率稳定度,全集成RC振荡器设计 由于数字电路指标仅与复杂度有关,此仅考虑模拟电路的设计指标。 项目Value电源电压2.5V~5.5V工作温度-40~125目标频率Ftyp 2MHZ频率精度&#x…

常用流媒体服务器

1、Mediasoup mediasoup是相对比较新的一个WebRTC服务器端的开源项目。它更多是通过集成包方式和其他应用服务器来集成。它支持SFU模式,主要支持视频聊天,媒体流广播等。 其特点是: 通过底层API实现和第三方集成,安装简单&#…

java自学第一天

1.1.体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) JavaME(J2ME)(Java 2 Platform Micro Edition&a…

如何提高代码交付效率,完成代码交付应用自动化?

为了提高代码交付效率,完成代码交付应用自动化,CoCode旗下Co-Project V2.5.0智能项目管理平台全新发布,新增CI/CD功能:Co-DevOps。 Co-DevOps是 CoCode 全新开发出的一项CI/CD功能,提供持续集成、持续交付(…

六轴工业机器人

连杆原理 符号中文名含义aaa连杆长度两个相邻关节轴之间的公垂线的长度α\alphaα连杆转角两个相邻关节间轴之间形成的角度,右手定则前一个轴到后一个轴ddd连杆偏距两个相邻连杆之间的距离,高度差θ\thetaθ关节角两个相邻杆绕公共关节轴旋转的角度 机…

TypeScript-01基础知识

目录 一、ts与es、js之间的关系 二、TypeScript与JavaScript之间的区别 三、安装TypeScript编译器 四、执行typescript的步骤 五、ts的数据类型 1、类型别名 2、接口 接口 与 类型别名 的区别 3、类型断言 4、文字类型 不常用枚举、bigint、symbol 六、类型缩小 1、…

Linux socket 编程 UDP

套接字:操作系统向上层提供的用于实现网络通信的统称 网络通信其实本质上就是两台主机之间的通信其中一段是客户端,另一端是服务器 客户端:用户的一端,客户端是主动发出请求的一端 服务端:针对用户请求提供服务的一端…

Linux 进程控制

🧑‍💻进程控制 🧑‍💻 文章目录🧑‍💻进程控制 🧑‍💻一、进程创建1. fork函数2. fork常规用法3. fork创建子进程操作系统都做了什么?4. 写时拷贝5. 父子进程代码的共享…

String(二)————迭代器及相关接口使用

目录 string构造接口(Construct string object) string的元素访问(读写) 迭代器 string构造接口(Construct string object) string相比于C语言的字符数组要好用的多,无论是在初始化还是在读写…

排序5:直接选择排序

目录 排序思想: 演示图: 代码实现 总结: 排序思想: 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个…

SpringMVC---->自我实现底层机制(吃透springMVC)

目录 配套代码在资源中(免费) maven环境搭配 注解注入的规范: 一.开发HongDisptcherServlet前端控制器 1.说明: 2.配置web.xml文件 3.检查前期工作是否成功 二.完成客户端/浏览器请求控制层 1.创建 自己的 Controller 和…

【HTML+CSS+JS】模仿QQ登录界面

目录前言简介布局思路相关代码颜色渐变动画头像表单区域JS相关总结前言 学了HTML、CSS和JS有了一个月了,JS还未学完,偷懒写一个小项目,用了一个下午,顺便巩固一下所学知识。(内容比较简陋,适合新手&#x…

基于火鹰优化算法的函数寻优算法

文章目录一、理论基础1、火鹰优化算法2、FHO算法伪代码二、仿真实验与结果分析三、参考文献一、理论基础 1、火鹰优化算法 文献[1]提出了火鹰优化算法(Fire Hawk Optimizer, FHO)作为一种新的元启发式算法,该算法基于啸鸢、麻鹰和褐隼的觅食行为,这些鸟…

【网络原理】网络编程Socket套接字基础知识汇总

目录 1.网络初始: 2.网络编程: 3.UDP数据报套接字: 4.TCP流套接字: 1.网络初始: 局域网(LAN)广域网(WAN)IP地址用于定位主机的网络地址。端口号可以标识主机中发送数…

数据结构六:堆

前言:上一篇我们讲了二叉树,你知道吗?堆的底层是一棵完全二叉树。这样说会不会就会觉得熟悉了。 目录 1.堆的概念及存储方式 2:堆的创建 2.1:向下调整 3.堆的插入和删除 3.1:堆的插入 3.2:堆的删除 …

基于Web的商城后台管理系统的设计与实现

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Oracle和MySQL查询所有的表信息和字段信息

Oracle和MySQL查询所有的表信息和字段信息1. MySQL1.1 查询表1.2 查询字段1.2.1 方式1->SHOW FULL COLUMNS1.2.2 方式2->information_schema.COLUMNS1.3 查表和字段1.4 查表和字段-->转程Oracle需要的数据类型2. Oracle2.1 查表和字段的单表查询2.2 整理查表和字段的s…

超详细的JUnit单元测试介绍

前言 本文为JUnit单元测试相关知识,下边将对JUnit单元测试概念,JUnit优点,JUnit安装与使用,JUnit运行流程与常用注解,JUnit测试套件使用及参数化设置,JUnit断言等进行详尽介绍~ 📌博主主页&…