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

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日

相关文章

  • nodejs socket实现的服务端和客户端功能示例

    我来为您讲解一下“nodejs socket实现的服务端和客户端功能示例”的完整攻略,希望能对您有所帮助。 简介 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它是一个开放源代码、跨平台的服务器端运行环境。在Node.js中,socket可以用来实现服务器与客户端之间的数据传输。本文将介绍Node.js中如何使用socket实…

    node js 2023年6月8日
    00
  • Nodejs做文本数据处理实现详解

    关于 “Nodejs做文本数据处理实现详解” 的攻略,我将从以下几点进行讲解: Node.js基础知识和使用场景 文本数据处理的常用方法及如何在Node.js中实现 示例详解:使用Node.js读写文本文件、处理CSV文件 1. Node.js基础知识和使用场景 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以使JavaSc…

    node js 2023年6月8日
    00
  • NodeJS 实现手机短信验证模块阿里大于功能

    下面按照标准的 Markdown 格式给出详细的讲解: NodeJS 实现手机短信验证模块阿里大于功能 1. 介绍 阿里大于是阿里云的短信服务,提供了丰富的短信发送功能,可以用于各种短信发送需求。在 NodeJS 中,我们可以使用 阿里大于的 NodeJS SDK 来进行开发。 2. 准备工作 在开始之前,需要确保已经申请了阿里大于的短信服务,并获取到了 A…

    node js 2023年6月8日
    00
  • 使用ThinkJs搭建微信中控服务的实现方法

    使用ThinkJs搭建微信中控服务的实现方法 ThinkJs是一个快速、简单而又强大的Node.js框架,使用它可以很快地搭建Web应用。本攻略将介绍如何使用ThinkJs来搭建微信中控服务,包括对接微信公众号服务器、处理微信公众号消息等。 创建项目 首先,我们需要安装ThinkJs,可以通过npm来安装: npm install -g think-cli …

    node js 2023年6月8日
    00
  • Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例

    针对Node.js微信 access_token (jsapi_ticket) 存取与刷新的示例,我们可以按照以下步骤进行攻略: 第一步:获取access_token和jsapi_ticket 我们可以通过以下方式获取微信公众平台的access_token和jsapi_ticket: 获取access_token const request = requir…

    node js 2023年6月8日
    00
  • node.js中的console.dir方法使用说明

    下面是关于 Node.js 中的 console.dir 方法使用说明的攻略。 什么是 console.dir 方法 console.dir 方法是 Node.js 内置的一个调试方法,用于打印一个对象的所有属性和方法,类似于浏览器中的 console.log 方法,但是能够以更清晰的方式显示对象的结构。 如何使用 console.dir 方法 consol…

    node js 2023年6月8日
    00
  • node.js中的http.response.write方法使用说明

    下面是关于“node.js中的http.response.write方法使用说明”的完整攻略: 简介 在 Node.js 中,我们可以使用 http 模块来搭建一个简单的 Web 服务器。其中,http.createServer() 函数可以用来创建一个服务器实例,而 http.ServerResponse 对象中的 write() 方法可以用来向客户端发送…

    node js 2023年6月8日
    00
  • javascript中FOREACH数组方法使用示例

    下面我就为你详细讲解一下“javascript中FOREACH数组方法使用示例”的完整攻略。 FOREACH方法简介 FOREACH方法是 JavaScript 中 Array 对象定义的方法,用于对数组中的元素进行遍历操作。与传统循环不同的是,FOREACH方法不需要我们自己去编写循环变量、循环条件和循环增量等等。 FOREACH方法的语法 array.f…

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