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

require的加载优先级

原文地址:Node.js 模块系统 | 菜鸟教程

Node.js中自带了一个叫做”http”的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。
这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。
Node.js 的 require方法中的文件查找策略如下:
由于Node.js中存在4类模块(原生模块和3种文件模块),尽管require方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。如下图所示:

从文件模块缓存中加载

尽管原生模块与文件模块的优先级不同,但是都不会优先于从文件模块的缓存中加载已经存在的模块。

从原生模块加载

原生模块的优先级仅次于文件模块缓存的优先级。require方法在解析文件名之后,优先检查模块是否在原生模块列表中。以http模块为例,尽管在目录下存在一个http/http.js/http.node/http.json文件,require(“http”)都不会从这些文件中加载,而是从原生模块中加载。
原生模块也有一个缓存区,同样也是优先从缓存区加载。如果缓存区没有被加载过,则调用原生模块的加载方式进行加载和执行。

从文件加载

当文件模块缓存中不存在,而且不是原生模块的时候,Node.js会解析require方法传入的参数,并从文件系统中加载实际的文件,加载过程中的包装和编译细节在前一节中已经介绍过,这里我们将详细描述查找文件模块的过程,其中,也有一些细节值得知晓。
require方法接受以下几种参数的传递:
- http、fs、path等,原生模块。
- ./mod或../mod,相对路径的文件模块。
- /pathtomodule/mod,绝对路径的文件模块。
- mod,非原生模块的文件模块。

相关文章:

  • setTimeout 和 setInterval 的区别
  • 详解用CSS3制作圆形滚动进度条动画效果
  • cookie,session,localstorage,sessionStorage
  • 微信小程序经验分享
  • Array.prototype.slice() 方法
  • String.prototype.slice() 方法
  • span标签挨着写时的出现的迷之间距问题
  • 《Web性能权威指南》笔记:TCP的优化建议
  • MongoDB学习笔记(一) 安装与文件简介
  • MongoDB学习笔记(二) 搭建简单的MongoDB服务器
  • MongoDB学习笔记(三) MongoDB的基本操作
  • 保留一位小数
  • uniapp向另外一个页面传值
  • 小程序实现image标签的图片铺满整个屏幕,高度自适应
  • 百度小程序实现页面返回上一级局部刷新
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [NodeJS] 关于Buffer
  • 《深入 React 技术栈》
  • Apache Spark Streaming 使用实例
  • CSS3 变换
  • Java Agent 学习笔记
  • java第三方包学习之lombok
  • Vue ES6 Jade Scss Webpack Gulp
  • vue学习系列(二)vue-cli
  • win10下安装mysql5.7
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 高程读书笔记 第六章 面向对象程序设计
  • 为什么要用IPython/Jupyter?
  • 云大使推广中的常见热门问题
  • 再谈express与koa的对比
  • 怎么把视频里的音乐提取出来
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​linux启动进程的方式
  • #Lua:Lua调用C++生成的DLL库
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (十六)一篇文章学会Java的常用API
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)http-server应用
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)人的集合论——移山之道
  • .axf 转化 .bin文件 的方法
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core 项目指定SDK版本
  • .NET 反射的使用
  • .net 托管代码与非托管代码
  • .Net 知识杂记
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET多线程执行函数
  • .NET中统一的存储过程调用方法(收藏)
  • ::前边啥也没有
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL---stack与queue