Node 文件查找优先级及 Require 方法文件查找策略

yizhihongxing

Node 文件查找优先级及 Require 方法文件查找策略

在 Node.js 中,当我们使用 require 方法加载模块时,Node.js 会按照一定的文件查找策略来查找相应的模块文件。掌握这些策略对于理解 Node.js 模块化机制非常重要。

文件查找优先级

在加载模块时,Node.js 会按照以下顺序查找模块文件:

  1. 核心模块:如果你加载的是一个 Node.js 内置的核心模块(比如 fshttp 等),Node.js 将会优先查找该模块。由于这些模块已经被编译到 Node.js 中了,所以它们的加载速度很快,并且不需要进行文件系统 I/O 操作。

  2. 文件模块:当我们加载的是一个文件模块时,Node.js 会先查找缓存中是否已经加载过该模块,如果找到了直接返回缓存中的模块对象;否则,它会按照以下规则去查找并加载模块(这里的文件指的是 js、json 和 node 文件):

  3. 首先,Node.js 会查找是否有与该模块名称完全匹配且扩展名为 .js.json.node 的文件。例如,如果需要加载的模块名为 foo,则 Node.js 会查找是否存在 foo.jsfoo.jsonfoo.node 文件。

  4. 如果第一步找不到对应的文件,则 Node.js 会进入下一个寻找模块的阶段,即查找同名文件夹中的 index.jsindex.jsonindex.node 文件。例如,如果需要加载的模块名为 foo,则 Node.js 会查找是否存在名为 foo 的文件夹中是否存在 index.jsindex.jsonindex.node 文件。

  5. 如果第二步还是找不到对应的文件,则 Node.js 会将模块名解析为绝对路径,然后查找该路径下是否存在与模块名完全匹配且扩展名为 .js.json.node 的文件。

  6. 最后,如果以上三个步骤都没有找到对应的文件,则 Node.js 将抛出 MODULE_NOT_FOUND 错误。

Require 方法文件查找策略

在 Node.js 中使用 require 方法加载模块时,Node.js 会按照上述文件查找顺序查找相应的模块文件,并返回该模块的导出对象。下面是使用 require 方法加载模块的示例。

const foo = require("foo"); // 加载模块 foo

console.log(foo);

在上述示例中,Node.js 会按照文件查找优先级去查找模块 foo,并执行该模块中的代码,并将导出的对象赋值给变量 foo。如果 Node.js 无法找到模块 foo,则会抛出 MODULE_NOT_FOUND 错误。

下面是另一个使用 require 方法加载模块的示例,该模块为一个文件夹模块。

const bar = require("bar"); // 加载模块 bar(文件夹模块)

console.log(bar);

当我们使用 require 方法加载 bar 模块时,Node.js 会按照文件查找优先级首先查找是否有与 bar.jsbar.jsonbar.node 文件名完全匹配的文件,因为 bar 模块实际上是一个文件夹,并没有与之匹配的文件,因此 Node.js 会进入第二个查找阶段,即查找文件夹中是否存在 index.jsindex.jsonindex.node 文件。如果存在,则 Node.js 会执行该文件中的代码,并将导出的对象赋值给变量 bar。如果 index 文件不存在,则 Node.js 会抛出 MODULE_NOT_FOUND 错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node 文件查找优先级及 Require 方法文件查找策略 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node Express用法详解【安装、使用、路由、中间件、模板引擎等】

    Node Express是一个基于Node.js的开源Web开发框架,提供了丰富的API和中间件,方便开发者构建高效、稳定的Web应用程序。本文将介绍如何安装、使用和配置Node Express框架,并详细讲解路由、中间件和模板引擎等相关知识。 安装Node Express 在安装Node Express之前,需要确保已经安装了Node.js。在命令行中输入…

    node js 2023年6月8日
    00
  • Java基于正则表达式实现xml文件的解析功能详解

    Java 基于正则表达式提取 XML 数据 在 Java 中,使用正则表达式可以通过字符串匹配的方式提取 XML 文件中所需的信息。本文介绍如何使用 Java 正则表达式提取 XML 数据的完整攻略。 1. 实现思路 XML 文件的结构和数据都是有层次结构的,因此可以使用正则表达式来匹配 XML 标签和属性。实现思路如下: 读取 XML 文件,将其转化为字符…

    node js 2023年6月8日
    00
  • java实现单链表增删改查的实例代码详解

    Java实现单链表增删改查的实例代码详解 单链表是一种常见的数据结构,它由多个节点组成,每个节点包含一个值和一个指针,指向下一个节点。单链表可以用于实现栈、队列等数据结构。 在Java中,我们可以使用类来表示一个单链表。下面是单链表节点类的示例代码: class ListNode { int val; ListNode next; ListNode(int …

    node js 2023年6月8日
    00
  • JS获取字符串型数组下标的数组长度的代码

    获取字符串型数组下标的数组长度是指获取字符串数组中每个元素的字符串长度,并将这些长度作为一个新的数组返回。 以下是获取字符串型数组下标的数组长度的代码攻略: 1.使用for循环遍历字符串数组,并使用JavaScript内置函数length获取每个字符串的长度,将其存储在一个新的数组中。 function getArrayLength(arr) { var l…

    node js 2023年6月8日
    00
  • 全面了解Node事件循环

    全面了解Node事件循环攻略 Node.js基于事件驱动和非阻塞的I/O模型,事件循环是Node.js的核心机制之一。本攻略将从事件循环概念、事件循环机制、事件循环阶段以及事件循环实例等方面详细介绍Node事件循环。 事件循环概念 事件循环机制与操作系统紧密相连,它通过监听操作系统所提供的各类事件,驱动应用程序的运行。事实上,我们使用计算机时无论接触到什么,…

    node js 2023年6月8日
    00
  • node制作一个视频帧长图生成器操作分享

    下面是“node制作一个视频帧长图生成器操作分享”的完整攻略。 1. 安装依赖 首先,需要保证已经在本地安装了node.js和npm,然后在项目根目录下使用以下命令安装依赖: npm install –save canvas video-frame 其中,canvas是用于绘制长图的库,video-frame则是用于提取视频帧的库。 2. 编写代码 接下来…

    node js 2023年6月8日
    00
  • nodejs的压缩文件模块archiver用法示例

    下面是关于Node.js的压缩文件模块archiver的用法示例完整攻略。 什么是archiver模块? archiver是一个流式压缩模块,它可以创建和压缩zip、tar、gzip和tar.gz等压缩格式的文件。archiver的API简单,使用方便,是一个非常优秀的压缩模块。 安装archiver模块 在使用archiver模块之前,需要先安装它,可以通…

    node js 2023年6月8日
    00
  • Node学习笔记:Node.js安装及环境配置 史诗级详细版【含测试与镜像说明】

    Node学习笔记:Node.js安装及环境配置 史诗级详细版【含测试与镜像说明】 在本篇文章中,我们将讲解如何安装和配置Node.js的环境,以及如何使用一些常见的工具和命令行操作,以便在日常开发中更高效地使用Node.js。 Node.js安装 安装Node.js 首先,你需要访问 Node.js官网 下载你所需要的版本(LTS或Current均可),然后…

    node js 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部