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

模块加载机制(require)--内置、第三方、自定义、文件夹

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

所以:

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

        只是执行了一次


 内置模块的加载机制(是node官方提供的,内置模块加载优先级最高)

例如:require('fs')返回的内置fs模块,即使在node_modules文件夹中有相同名字的包也叫做fs,导入的也是官方的模块

自定义模块的加载机制(是自己编写的)

使用require加载自定义模块时候,必须以./或者../开头的路径标识符。加载自定义模块时,如果没有指定../或./这样的路径标识符,则node会把他当作内置模块或者第三方模块,进行查找

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

  • 按照确切的文件名进行加载
  • 补全.js文件扩展名加载
  • 补全.json扩展名进行加载
  • 补全.node扩展名进行加载(不需要要写代码测试)
  • 加载失败,终端报错

 可以新建这些后缀名的文件,然后进行加载,显示结果

内置模块的加载机制(是第三方编写的)

如果传递给 require()的模块标识符不是一个内置模块,也没有以'./'和'../'开头,则node.js会从当前的父目录开始,尝试从node_modules文件夹中加载第三方模块

如果没有找到第三方模块,将移动到再上一层父目录中,进行加载,直到文件系统的根目录

目录作为模块(文件夹)

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

  • 在被加载的目录下查找package.json(只能用双引号)文件,并寻找main属性,作为require()加载的入口
  • 如果目录里面没有package.json文件,或者main入口不存在或者无法解析,则node.js将会视图加载目录下的index.js文件
  • 如果上面两步骤都失败,node,打印错误小写,报告模板的缺失:Error:Cannot find module 'xxx'

 

相关文章:

  • js分组匹配、遍历结果
  • shell脚本学习笔记2
  • STM32-串口通信波特率计算以及寄存器的配置详解
  • 物联网开发笔记(5)- 使用Wokwi仿真树莓派Pico实现LED灯交替闪烁(续)
  • 洛谷 P7302 [NOI1998] 免费的馅饼
  • Docker基础-2.常用命令与Docker镜像
  • Java的Lambda表达式学习笔记:认识lambda表达式
  • SAP Spartacus 项目开发时需要注意的一些常见错误
  • SpringBoot - @JsonIgnore和@JsonIgnoreProperties注解详解以及区别
  • 神经网络概念图片大全,神经网络概念图片解析
  • 产业园区构建公共服务平台应当包含哪些服务
  • 链动2+1模式是如何驱动品牌全面爆发的?
  • DMSA(Distributed multi-scenario analysis)
  • 从IDEA开始,迈进GO语言之门
  • 神经网络算法有哪些模型,神经网络算法模型resnet
  • [译] 怎样写一个基础的编译器
  • 【面试系列】之二:关于js原型
  • ➹使用webpack配置多页面应用(MPA)
  • download使用浅析
  • IDEA常用插件整理
  • iOS 颜色设置看我就够了
  • JavaScript设计模式与开发实践系列之策略模式
  • JS数组方法汇总
  • Laravel 中的一个后期静态绑定
  • maven工程打包jar以及java jar命令的classpath使用
  • Median of Two Sorted Arrays
  • React-生命周期杂记
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 大整数乘法-表格法
  • 解析 Webpack中import、require、按需加载的执行过程
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 事件委托的小应用
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #{}和${}的区别是什么 -- java面试
  • #pragam once 和 #ifndef 预编译头
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)构建dubbo分布式平台-平台功能导图
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (正则)提取页面里的img标签
  • (转) Android中ViewStub组件使用
  • (转)【Hibernate总结系列】使用举例
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)程序员疫苗:代码注入
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 版本不支持的问题
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?